我想根据值/高度为条形图着色

时间:2019-10-02 14:04:56

标签: matlab

我正在尝试制作根据其值具有颜色的条形图。我可以将条形图和热图分开,但不能分开。

以下是我尝试合并的命令:

N = X(1:10,1);
h = bar(N, 'hist');
cData = get(h, 'CData');
h.CData(n,:) = rbg;
set(h, 'CData', cData);

1 个答案:

答案 0 :(得分:2)

我在R2018b版本中进行了测试。默认情况下,条形的颜色由FaceColorEdgeColor属性确定,而不是直接由CData属性确定。 CData属性仅在FaceColor设置为'flat'时使用。

这是使用bar(Y)的简短示例。
Resulting image

n_groups = 4;
n_data_per_group = 5;

Y = rand(n_groups, n_data_per_group);

h = bar(Y);
set(h, 'FaceColor', 'flat');
for i = 1:n_data_per_group
    h(i).CData = Y(:, i);
end

colorbar

或者,根据gnovice's solution in the other thread的建议,可以使用bar(Y, 'hist')来制作Patch对象,而不是Bar对象。下面对他的示例进行了一些修改,以适应多组数据。
Resulting image

n_groups = 4;
n_data_per_group = 5;

Y = rand(n_groups, n_data_per_group);
h = bar(Y, 'hist');
set(h, 'CDataMapping', 'scaled');
for i = 1:n_data_per_group
    h(i).CData = Y(:, i);
end

colorbar

两种方法之间可观察到的主要区别是条之间的默认间距。