首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab条形图:用颜色图(Jet)设置颜色作为条形高度的函数

Matlab条形图:用颜色图(Jet)设置颜色作为条形高度的函数
EN

Stack Overflow用户
提问于 2017-11-17 09:46:38
回答 1查看 4K关注 0票数 2

我有4组不同的多个酒吧。对于每个组,我希望用colormap(jet)绘制每个条形的颜色,这个颜色是它的高度值(即相关条的值)的函数。

就目前而言,我已经做了:

代码语言:javascript
复制
h=bar(xpoints(1:4),bpcombined(1:4,:),'grouped','BarWidth',0.5);
colorbar;
colormap(jet); 

我得到了以下数字:

正如您所看到的,对于每个条形,它的颜色并不是高度的函数:它只是一个不同颜色的序列(喷射颜色图),对于这四个组是相同的。

我如何才能得到这种依赖,我的意思是,最高的条将是红色和最低的蓝色以下的彩色地图(jet)?

更新1

我尝试了@masei建议的解决方案,但在Matlab2016b上得到了以下错误:

代码语言:javascript
复制
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),如下所示:

代码语言:javascript
复制
  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 

但我得到了以下错误:

代码语言:javascript
复制
Field assignment to a non-structure array object.

Error in test_plot_bar_color (line 25)
    bar_child.FaceColor = y_color(:,:);

我的方法怎么了?

EN

回答 1

Stack Overflow用户

发布于 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分隔。这样,您就可以完全控制每个单独的栏(栏不再分组)。

以下图

是由

代码语言:javascript
复制
% 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');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47347611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档