如何为 3D 条形图中的条形设置任意颜色?

2023-12-09

假设我有一个矩阵Z有一些值,我想通过绘制中的值来说明它Z按身高。我想到的第一个解决方案是表面,但是使用surf小矩阵的类似函数看起来不太好。

所以我考虑使用 3D 条形图之类的东西bar3。但问题是这个函数总是按组而不是按高度设置颜色,我无法让它这样做。

这是一个例子:

Z = peaks(5);
subplot 121
surf(Z)
title('Surface look bad')
subplot 122
bar3(Z)
title('The color is not by height')

enter image description here

我试图在返回的句柄中查找颜色属性bar3 (like CData and FaceColor)但迷失了所有的价值观以及它们与酒吧本身的关系。

最终,我想要一个通用的解决方案,对于 2 个矩阵Z and C我可以创建一个 3D 条形图,其条形高度为Z和颜色由C.

我怎样才能这样做呢?


功能bar3返回一个surface对象,每组一个(即每种颜色一个),因此一组中的所有条形基本上都绘制为一个“破碎”表面。这在中解释得很好这个答案,所以这里不再重复。

相反,我将找到这个特定问题的解决方案。曲面的相关性质为CData。当我们创建条形图时,每个表面的CData被分配了一个大小相同的矩阵(我们稍后会讲到这一点),该矩阵全部相等。每个表面都有不同的值。这就是整个图形将其颜色图转换为各组颜色的方式。

如上所述(并在链接答案),每个组由一个表面表示,因此需要整个矩阵来定义表面每个点的颜色。我们要做的第一件事是获取这个矩阵大小:

Z = peaks(5);
bar_h = bar3(Z);
% we take only the first one, but they are all the same size:
cdata_sz = size(bar_h(1).CData) 

cdata_sz =
    30     4

CData始终有 4 列(参见here为什么),并且行数始终是 6* 组数。这是因为需要 5 个顶点来创建一个带有区域对象的封闭矩形(最后一个顶点与第一个顶点类似),并且一条线用于在带有 NaN 的条形之间留出间距,因此它们看起来是分开的。

接下来,我们需要放大原始颜色图(与Z)以适合CData以正确的方式。本质上,我们只想为属于同一条的所有顶点重复相同的值。假设Z也是我们的颜色数据(即我们按高度着色),我们这样做:

z_color = repelem(Z,6,4)

现在我们需要分割我们的z_color到我们组中数量不同的单元格。每个单元格将包含一个表面对象的着色数据:

z_color = mat2cell(z_color,cdata_sz(1),ones(1,size(Z,2))*cdata_sz(2));

最后,我们将新的颜色数据应用于条形图:

set(bar_h,{'CData'},z_color.')

作为奖励,如果我们想从条中删除所有零值,可以通过将它们设置为 NaN 来轻松完成:

Z(abs(Z)<eps) = nan;
C(isnan(Z)) = nan; % if we use a colormap C different from Z

demo2

以上所有内容都可以归结为这个方便的功能:

function bar_h = Cbar3(Z,C,b,y)
% Z - The data
% C - CData (if other then Z values)
% b - Minimum absolute value to keep colored
% y - y-axis values to order the data by

if nargin<2, C = Z; end
if nargin<3 || isempty(b), b = 0; end
Z(abs(Z)<b) = nan;
C(isnan(Z)) = nan;
if nargin<4 
    bar_h = bar3(Z);
else
    bar_h = bar3(y,Z);
end
cdata_sz = size(bar_h(1).CData);
z_color = repelem(C,6,4);
z_color = mat2cell(z_color,...
    cdata_sz(1),ones(1,size(Z,2))*cdata_sz(2));
set(bar_h,{'CData'},z_color.')
end

使用示例:

subplot 121
Z = peaks(30);
Cbar3(Z,Z,0.5);
pbaspect auto
shading flat % just to get a cleaner look
title('Cbar3 using height as color')

subplot 122
Cbar3(Z,rand(size(Z)),0.5);
pbaspect auto
shading flat % just to get a cleaner look
title('Cbar3 using random as color')

Result:

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 3D 条形图中的条形设置任意颜色? 的相关文章

  • Godot 3d 得到向前矢量

    我想知道是否有办法获取 godot 3d 中空间节点的前向向量 统一起来 这就是transform forward Godot 给了我一个旋转向量 但我不知道如何将其转换为方向向量 戈多版本的transform forward是什么 前进是
  • MATLAB 中的多个捕获组

    我有一个包含数字或字母的字符串a 可能紧随其后的是r or l 在 MATLAB 中 以下正则表达式返回为 gt gt regexp 10r 0 9 a l r match ans 10r 我希望10 and r分开 因为我有两个捕获组 有
  • 在 matlab 中求 3d 峰的体积

    现在我有一个带有峰值的 3D 散点图 我需要找到其体积 我的数据来自图像 因此 x 和 y 值表示 xy 平面上的像素位置 z 值是每个像素的像素值 这是我的散点图 scatter3 x y z 20 z filled 我试图找到数据峰值的
  • 使用mat2cell将MxN的矩阵划分为1xN大小的M矩阵

    我有一个大小为 MxN 的矩阵 比方说 1867x3 1867 行和 3 列 我想将其分成 1867 个大小为 1x3 的单元格 我使用了mat2cell X 1 1866 这里X是矩阵 1867x3 结果给出了两个单元格 一个单元格的大小
  • 条形图的 Highcharts 背景图像

    我想使用 Highcharts 将背景图像添加到条形图并将其显示在UIWebView 到目前为止 我一直在使用这个小插件 它在最新的 Chrome 中运行良好 但是 一旦我将其加载到 UIWebView 中 图像就不会显示 我认为这与iOS
  • 为什么旋转 3D 点云后顶点法线会翻转?

    我有两个人脸 3D 点云样本 蓝色点云表示目标面 红色点云表示模板 下图显示目标面和模板面在不同方向上对齐 目标面大致沿 x 轴 模板面大致沿 y 轴 Figure 1 The region around the nose is displ
  • 使用纽厄尔方法在 Python 中计算表面法线

    我正在尝试实现 Newell 方法来计算 Python 中的表面法向量 基于以下伪代码here https www opengl org wiki Calculating a Surface Normal Begin Function Ca
  • 有没有办法在matlab中进行隐式微分

    我经常使用 matlab 来帮助我解决数学问题 现在我正在寻找一种在 matlab 中进行隐式微分的方法 例如 我想区分y 3 sin x cos y exp x 0关于dy dx 我知道如何使用数学方法通常做到这一点 但我一直在努力寻找使
  • 加速球之间的碰撞检测

    我正在编写一个物理引擎 模拟器 其中包含 3D 太空飞行 行星 恒星引力 船舶推力和相对论效应 到目前为止 一切进展顺利 但是 我需要帮助的一件事是碰撞检测算法的数学 我使用的运动迭代模拟基本上如下 注意 3D 矢量全部大写 For eac
  • Matlab:如何更改矩阵的存储方式?从 1x1x3 到 1x3?

    我目前有 val 1 0 7216 val 2 0 7216 val 3 0 7216 但我想要 0 7216 0 716 0 721 我可以做什么样的操作来做到这一点 The reshape函数将在这里解决问题 Arrange the e
  • 有人知道如何在android中实现像Unfold(这是iphone中的应用程序)这样的效果吗?

    我怎样才能实现这个效果呢 任何建议都会对我有帮助 None
  • 如何使 R barplot 上的列标签变为斜体

    这可能是一个简单的问题 但是如何仅将条形图上的列标签设为斜体 而不是斜体x axis标签 但列标签是专门的 到目前为止我的代码是 bp barplot means names arg c CON TRI ylim c 0 120 ylab
  • 括号中的波形符字符

    在 MATLAB 中 以下代码执行什么操作 m func returning matrix 波浪号运算符 的作用是什么 在 Matlab 中 这意味着不要将函数中相应的输出参数分配到赋值的右侧 因此 如果func returning mat
  • 使用 vtk 给定一组点创建多条折线

    我需要使用 vtk 和 paraview 显示 50 个粒子空间中的轨迹 目前我的数据是pos x y t n 其中 n 是第 n 个粒子的标签 我已将所有数据保存在 vtk 文件中 该文件的组织方式如下 vtk DataFile Vers
  • React-Three-Fiber:JSON 中位置 3 出现意外标记 c 错误

    我正在尝试使用 React Three Fiber 加载 glb 文件 但出现以下错误 Error Unexpected token c in JSON at position 3 我不确定我做错了什么 看来此问题最常见的解决方案是将 gl
  • 检测植物图片中的所有分支

    我想知道有什么可以检测下图中的所有绿色树枝 目前我开始应用 Frangi 过滤器 options struct FrangiScaleRange 5 5 FrangiScaleRatio 1 FrangiBetaOne 1 FrangiBe
  • 如何找到平面和 3d 矩阵之间的交平面

    如果我有一堆图像并且尺寸如下 size M 256 256 124 我有 3 个点 它们的坐标是 coor a 100 100 124 coor b 256 156 0 coor c 156 256 0 如何创建 M 与这 3 个点定义的平
  • 了解 fminunc 参数和匿名函数、函数处理程序

    请多多包涵 问题在最后 我试图找出 fminunc 调用方式的差异 这个问题源于 Andrew Ng 在他的 Coursera 机器学习课程中的第 3 周材料 我正在回答这个问题 Matlab Andrew Ng 机器学习课程中 t cos
  • “Desort”向量(撤消排序)

    在Matlab中 sort返回排序后的向量和索引向量 显示哪个向量元素已移动到以下位置 v ix sort u Here v是一个包含所有元素的向量u 但已排序 ix是一个向量 显示每个元素的原始位置v in u 使用 Matlab 的语法
  • ROC曲线和libsvm

    给定一条 ROC 曲线plotroc m see here http www csie ntu edu tw cjlin libsvmtools roc curve for binary svm 理论问题 如何选择要使用的最佳阈值 编程问题

随机推荐

  • 如何在启动 Android LibGDX 项目时修复 NoClassDefFoundError?

    我目前正在学习LibGDX游戏引擎 版本 1 9 4 当我尝试运行我的项目的 Android 版本时 我不断遇到编译错误 我做了一些研究发现this文章并遵循了该问题中列出的解决方案 但同样的问题不断发生log txt I tried ad
  • Pip Pythonnet 选项 --single-version-externally-management 无法识别

    尝试在 Windows WSL 上的 Ubuntu 18 04 Bionic 上安装 pythonnet 2 4 0 出现以下错误 安装的Mono版本是5 20 1 34和Python 3 6 Failed building wheel f
  • QtCreator 构建步骤变量名称是什么(例如 %{buildDir})?

    我指定了一个应在项目目录中运行的构建步骤 因此 如果这应该在一般情况下工作 我需要一个代表项目目录的符号 类似于 buildDir 它代表构建目录 Qt manual only mentions nonexistent Variables
  • 对 pandas 数据框中的条件赋值进行向量化

    如果我有一个数据框df带柱x并想要创建专栏y基于的价值观x在伪代码中使用它 if df x lt 2 then df y 1 else if df x gt 2 then df y 1 else df y 0 我将如何实现这一目标 我假设n
  • 使用 php 集成 WORLDPAY

    任何人都可以告诉我是WORLDPAY支付网关提供php的API吗 你们中有人集成了这个东西吗 请建议我 您可以在这里找到完整的文档 RBS WorldPay 技术指南 一个简单的付款提交如下所示
  • 类中派生信息的成员函数

    在为类设计接口时 我通常会陷入两个想法 是否应该提供可以通过使用其他成员函数的组合来计算 派生的成员函数 例如 class DocContainer public Doc getDoc int index const bool isDocS
  • 将 SVN 存储库的一部分合并到具有历史记录的另一个存储库

    我必须 svn 存储库 可以这么说A and B 我想将 B 的一些目录连同历史记录一起添加到 A 中 是否可以这样做 为了更清楚地说明 以下是场景 repo A repo B branches branches sub branch1 s
  • 正则表达式匹配仅包含在根目录中的资源

    我缺乏正则表达式知识 我正在尝试解决以下问题 我想编写一个表达式来仅匹配 Web 应用程序根路径中的 HTML html 文件 例如 以下内容应匹配 myfile html 以下内容不应匹配 包含子目录 home myfile html 我
  • 为什么 Java 中静态方法和非静态方法不能具有相同的方法签名?

    对我来说似乎确实没有意义 也许有人可以帮助我理解 我必须改变参数的顺序才能拥有此功能 这似乎有点愚蠢 因为 Java 允许调用static以非静态方式 即在类的对象上 调用方法 所以 如果一个类有static and non static方
  • 将两个或多个 STDOUT 重定向到单个 STDIN

    我想将两个程序的输出重定向到一个 STDIN 管道 可能以最有效的方式 那可能吗 Yes command1 command2 command3
  • 使用 imagemagick 分割图像

    我有一个大图像 由透明背景上的许多较小图像 不接触 组成 就像精灵表一样 但精灵的大小并不相同 也不是排列在网格上 我可以使用 ImageMagick 将图像分割成更小的图像吗 因此 例如 其中 彩色像素 变成这些 您可以通过一个命令来完成
  • 处置已实例化为方法参数的对象c#

    我有以下课程 private static readonly string ConnectionString Dummy public static SqlConnection GetConnection SqlConnection Con
  • 如何在AsyncTask中执行函数?

    我必须在 AsyncTask 中使用 Direction 函数来避免 UI 线程上的网络处理 我无法执行此操作 我的代码是 public class MainActivity extends MapActivity Override pro
  • Firebase:将分析和崩溃数据报告给单独的项目

    最近我遇到了本文来自 firebase 其中详细介绍了如何从单个应用程序访问多个项目 这很棒 并且可能非常有用 但是我一直无法找到一种方法将分析和崩溃报告分离到单独的项目中 我们希望这样做的原因是 我们的客户可以完全访问他们的分析 同时将崩
  • 如何在 IntelliJ 上使用 Scala 从 Spark 连接到 Hive?

    我是 hive 和 Spark 的新手 正在尝试找出一种访问 hive 中的表以操作和访问数据的方法 如何做呢 在火花 val sc new SparkContext conf val sqlContext new org apache s
  • 使用 jquery 只获取可见文本

    假设我有一些像这样的 html div Foo span style display none hidden span Bar div 实际上 这更复杂 并且是通过使用 Angular 生成的ng hide和类似的 我需要从以下位置获取所有
  • 通过GET调用Firebase云函数并返回参数

    我创建了这个云函数 exports returnUid functions https onRequest async req res gt const uid req query uid res send uid 当我打电话时https
  • 扩展 rand() 最大范围

    我创建了一个测试应用程序 生成 0 到 250 000 范围内的 10k 随机数 然后我计算了最大值和最小值 并注意到最大值始终在 32k 左右 您知道如何扩大可能的范围吗 我需要一个最大值在 250 000 左右的范围 这是根据 rand
  • 如何在rest资源spring data Rest中将导出的默认值设置为false

    我想使用 Spring Data Rest 的 RestResource 注解 如您所知 它默认公开所有 CRUD 方法 但我只需要 findAll 方法 一种方法是将所有其他方法的导出值设置为 false 如下所示 RestResourc
  • 如何为 3D 条形图中的条形设置任意颜色?

    假设我有一个矩阵Z有一些值 我想通过绘制中的值来说明它Z按身高 我想到的第一个解决方案是表面 但是使用surf小矩阵的类似函数看起来不太好 所以我考虑使用 3D 条形图之类的东西bar3 但问题是这个函数总是按组而不是按高度设置颜色 我无法