matlab bar colormap为所有条形返回相同的颜色

时间:2013-07-23 16:02:42

标签: matlab matlab-figure

我在使用bar和色彩映射时遇到问题。

我有一个这样的csv文件,其中包含六个任务的完成时间:

34,22,103,22,171,26
24,20,41,28,78,28
37,19,60,23,141,24
...

我创建了带有平均值的条形图,并添加了std变异误差栏。

res = csvread('sorting_results.csv');
figure();
y = mean(res)';
e = std(res);
hold on;
bar(y);
errorbar(y,e,'.r');
title('Sorting completion time');
ylabel('Completion time (seconds)');
xlabel('Task No.');
hold off;
colormap(summer(size(y,2)));

为什么输出会这样?为什么酒吧颜色相同?我如何把传说放到六个柱子上?

enter image description here

2 个答案:

答案 0 :(得分:0)

请参阅MATLAB文档中的Coloring 2-D Bars According to Height。只使用色彩图的第一种颜色为面部着色,你需要一些黑客(根据该文档页面上的代码)来做你想要的。

答案 1 :(得分:0)

一段能够发挥魔力的代码。它不使用@ am304提到的规范技术,因为你很难用它设置图例。在这里,对于6个输入值中的每一个,我们绘制完整的6个柱:一个条带有值,其余五个条带设置为零。

x = rand(1,6);     %create data
x_diag = diag(x);  %zero matrix with diagonal filled with x
cmap = summer(6);  %define colors to use (summer colomap)

figure('color','w','Render','Zbuffer'); %create figure

%bar plot for each x value
for ind_data = 1:length(x)
    h_bar = bar( x_diag(ind_data, :)); %bar plot
    set( get(h_bar,'children'), 'FaceVertexCData', cmap(ind_data,:) ) ; %color
    hold on;
end
colormap('summer');

%legend-type info
hleg = legend( ('a':'f')' ); 
set(hleg, 'box', 'off');
%xticks info
set(gca, 'XTickLabel', ('a':'f')' );

%plot errors
e = ones(1,6) * 0.05;
errorbar(x, e,'.r');
set(gca, 'FontSize', 14, 'YLim', [ 0 (max(x) + max(e) + 0.1) ]);