【问题标题】:bar3 colour depending on zdatabar3 颜色取决于 zdata
【发布时间】:2012-10-01 12:29:02
【问题描述】:

使用bar3 function 时,条形的颜色取决于数据所在的列或行。示例:

data = peaks(20);
bar3(data);
view(-135,30)

如何使每个条的颜色仅取决于该条的高度(zdata)?

【问题讨论】:

  • 默认行为是愚蠢的,当然:在哪个世界中,您希望您的数据被一个自变量的值着色?

标签: matlab colors plot customization histogram


【解决方案1】:

很难弄乱条的颜色,因为所有的条都是用补丁构建的。您必须更改补丁顶点的 zdata;由于这不是很简单,我为此目的制作了一个函数:bar3c

例子:

data = peaks(20);
bar3c(data);
view(-135,30)

编辑

如果您想使用其他颜色,只需更改colormap
如果您想设置整个范围以获得相同的颜色,而不是在最小/最大值之间获得渐变,则必须将调用更改为 makecdata。现在它使用zdata 来指定它的颜色,您可以轻松地更改它来给一个范围一个特定的颜色。

其实我就是这么做的,结果可以在here找到。

例子:

data = peaks(20);
bar3crange([-8 0 3 4 8], data);
% colormap: red/yellow/green/blue
colormap([1 0 0;1 1 0;0 1 0;0 0 1]);
view(-135,30);

【讨论】:

  • 它有效。但是官方的说明失败了,如mathworks.com/help/matlab/creating_plots/…所示。
  • @InmanLee 因为该示例适用于 R2014a;在 R2012a 中,您可以使用手册 getset 函数,它们提供的内容与您提供的示例相同。我的 bar3c 函数与此不同,因为它将整个条形变为相同的颜色,而不仅仅是顶部或阴影条。
  • 不错的功能。有时,完全采用单一颜色的条形比阴影版本要好得多。
【解决方案2】:

或者,如果您想在没有外部功能的情况下这样做,请尝试

data = peaks(20);
h = bar3(data);
view(-135,30);


for i = 1:size(data,2)
    cdata = get(h(i),'cdata');
    k = 1;
    for j = 0:6:(6*size(data,1)-6)
        cdata(j+1:j+6,:) = data(k,i);
        k = k+1;
    end
    set(h(i),'cdata',cdata);
end

colormap(jet);

感谢Sebastian at aiZac 的灵感。

【讨论】:

  • 没有冒犯,但这与我的回答一样,只是不那么笼统。另一方面:看起来不错,我记得分析 cdata 属性并正确填充它很痛苦..
  • @GuntherStruyf 哦,是的,我认为它可能会相似。我根本没有批评你的回答,只是我更喜欢直接在 SO 上找到我需要的代码,而不是必须通过链接找到它。
  • 很好:对于 SO 来说,拥有代码绝对比链接更好!
猜你喜欢
  • 2017-11-28
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多