我有4组不同的多个酒吧。对于每个组,我希望用colormap(jet)绘制每个条形的颜色,这个颜色是它的高度值(即相关条的值)的函数。
就目前而言,我已经做了:
h=bar(xpoints(1:4),bpcombined(1:4,:),'grouped','BarWidth',0.5);
colorbar;
colormap(jet); 我得到了以下数字:

正如您所看到的,对于每个条形,它的颜色并不是高度的函数:它只是一个不同颜色的序列(喷射颜色图),对于这四个组是相同的。
我如何才能得到这种依赖,我的意思是,最高的条将是红色和最低的蓝色以下的彩色地图(jet)?
更新1
我尝试了@masei建议的解决方案,但在Matlab2016b上得到了以下错误:
No appropriate method, property, or field 'CData' for class 'matlab.graphics.chart.primitive.Bar'.
Error in test_plot_bar_color (line 17)
b.CData(k,:) = y_color(k,:);我不知道如何避免这个错误。
@masei告诉我要使用‘FaceColor’属性,但是我不知道如何将它放在这个脚本上。
更新2
我尝试应用@marsei的建议,即多次绘制条形组中的部分(其他组设置为Nan),如下所示:
1 clear;
2 % Data
3 y = rand(10,4);
4 % 2D array of nan
5 y_nan = nan(size(y))
6 % 1D array by default
7 y_1d(1:numel(y)) = nan(numel(y),1);
8
9 %Plot
10 figure('Color', 'w');
11 title('Bar with height-dependant color');
12 for k = 1:size(y,2)
13 % Set default 1D array
14 y_temp = y_1d;
15 % Put k-th part of data
16 y_temp((k-1)*size(y_nan,1)+1:k*size(y_nan,1)) = y(1:size(y_nan,1),k);
17 % Reshape 1D into 2D for bar
18 y_final = reshape(y_temp,size(y,2),size(y,1));
19 % Plot bar
20 bar_h = bar(y_final,'BarWidth',0.5);
21 y_color = vals2colormap(y_final(k,:),'jet');
22 %b.FaceColor = y_color(:,:);
23 %y_color
24 bar_child=get(bar_h,'Children');
25 bar_child.FaceColor = y_color(:,:);
26 %colormap(y_color);
27 %set(bar_child,'CData',y_final);
28 hold on;
29 end
30 但我得到了以下错误:
Field assignment to a non-structure array object.
Error in test_plot_bar_color (line 25)
bar_child.FaceColor = y_color(:,:);我的方法怎么了?
发布于 2017-11-17 11:16:54
编辑-使用排序数据的示例(y = sort(rand(30,10),2)和separation_gap = 5)

您可以使用名为CData的普通bar属性为每个条形图分配颜色。在vals2colormap (网站)的帮助下计算颜色。
初始数据矩阵有10行,给出了规则bar图中的10组条形图。此时,更改第一个条形图的CData属性将更改所有第一个条形图的颜色(对于所有组)。你不能把第一个酒吧分开。
然后,诀窍是将矩阵压平,而插入NaNs以进行组分离。在这里,初始数据是40元素向量中的10x4扁平,用单个Nan分隔。这样,您就可以完全控制每个单独的栏(栏不再分组)。
以下图

是由
% data
y = rand(10,4);
% add NaNs (for separation) and flatten
separation_gap = 1; % 2 columns of NaN
y_nan = [y nan(size(y,1), separation_gap)]';
y_flat = [nan(separation_gap,1); y_nan(:)];
%convert values to colomap
y_color = vals2colormap(y_flat, 'jet');
%plot and cange color
figure('Color', 'w');
b = bar(y_flat);%,'grouped'
b.FaceColor = 'flat';
for k = 1:size(y_flat,1)
b.CData(k,:) = y_color(k,:);
end
title('Bar with height-dependant color');https://stackoverflow.com/questions/47347611
复制相似问题