plotyy()值的不同ColorMaps

时间:2014-02-19 12:45:24

标签: matlab plot

我有一个条形图,其中有2个Y轴用plotyy()生成,并希望为每个轴分配一个颜色图。我厌倦了使用colormap(axis,map),但它似乎覆盖了整个情节的设置,而不是仅覆盖axis的情节。

我的方法:

[haxes,hbar1,hbar2]=plotyy(1:2,randi(2000,2,3),3:5,randi(100,3,3),'bar','bar');

set(haxes(1), 'xtickLabel', name(1:2));
set(haxes(2), 'xtickLabel', name(3:5) );
set(haxes,{'ycolor'},{'r';[67,186,52]./256});

%set(hbar1, 'facecolor', ['r','w','y']); %<- Things like this work, but are not what Iwant
colormap(haxes(1),hot)
colormap(haxes(2),summer)

导致这个情节

Resulting plot

我想要这样的东西(我用手生成,着色单条)

Desired object

如何在一个图中应用两种不同的色彩映射?

3 个答案:

答案 0 :(得分:1)

将要使用的所有色彩映射连接到单个色彩映射,然后将每个bareries对象设置为直接索引到此色彩映射的相关bin中。 E.g。

[haxes,hbar1,hbar2]=plotyy(1:2,randi(2000,2,3),3:5,randi(100,3,3),'bar','bar');
colormap(haxes(1),[hot(3); summer(3)])
for a = 1:3
    set(get(hbar1(a), 'Children'), 'CData', [a; a], 'CDataMapping', 'direct');
    set(get(hbar2(a), 'Children'), 'CData', [a; a; a]+3, 'CDataMapping', 'direct');
end

产生

enter image description here

答案 1 :(得分:0)

这正是你想要的,

y = [4.2; 4.6; 5];
h = figure;

a = axes('parent', h);

hold(a, 'on')

colors = {'r', 'b', 'g'};

for i = 1:numel(y)
    bar(i, y(i), 'parent', a, 'facecolor', colors{i});
end

enter image description here

答案 2 :(得分:0)

色彩映射适用于整个图形,而不仅仅是轴,因此当您第二次设置色彩映射时,只需覆盖第一个色彩映射。引用色彩图文档(我自己强调):

  

colormap(ax,...)使用与ax轴相对应的数字而不是   目前的数字。