我有 4 组不同的多个酒吧。我想,对于每个组,用颜色绘制每个条形,该颜色是其高度值(即相关条形的值)的函数colormap(jet)
.
目前,我已经做了:
h=bar(xpoints(1:4),bpcombined(1:4,:),'grouped','BarWidth',0.5);
colorbar;
colormap(jet);
我得到下图:
正如您所看到的,对于每个条形,其颜色不是高度的函数:它只是一系列不同颜色(喷射颜色图),对于 4 组来说是相同的。
我怎样才能获得这种依赖性,我的意思是颜色图(jet)之后最高的条形将是红色,最低的蓝色条形?
Update 1
我尝试了建议的解决方案@masei
但我在 Matlab 2016b 上收到以下错误:
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
’属性,但我不知道如何将其放在这个脚本中。
Update 2
我尝试应用的建议@marsei
,即多次绘制 bar 组的部分(其他组设置为 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(:,:);
我的方法有什么问题吗?