绘制左轴上的线图超过右轴上的条形图
问题描述:
在带有两个y轴的图中,一个用于线图(左)和一个用于条形图(右),我想条形图在折线图下获得更好的可见性而不是更高的可见性。绘制左轴上的线图超过右轴上的条形图
正如你可以在这张照片(我希望你能看到它)看到,条形图显示沉淀和不同的线叶绿素指数的演变进化,我的问题是,条形图覆盖线条,我希望线条更加精细。
这是我的脚本:
figure
yyaxis right
bar (meteo(:,1),meteo(:,14));
ylabel('Precipitation (mm)');
hold on
for i=1:6;
a = [];
b = [];
color = ['r' 'm' 'b' 'c' 'g' 'y'];
for j=0:6
a(i,j+1)=matrice_5(j*6+i,1);%jour
b(i,j+1)=matrice_5(j*6+i,3);%moyenne
end
hold on
yyaxis left
plot(a(i,:),b(i,:),color(i),'LineWidth',1.5);
end
title('Evolution of the mean of the chlorophyll index (HNT) - Charlotte variety');
xlabel('Day (2013)')
ylabel('Chlorophyll index (HNT)')
axis([735390 735442 32 50]);
set(gcf,'Position',[645 206 701 477]);
datetick('x','dd mmm','keepticks')
h=legend('0','50','100','150','200','250','precipitation','Location','best');
v = get(h,'title');
set(v,'string','Nitrogen rate in kg/ha');
set(h,'Position', [0.1793 0.1494 0.1127 0.2446]);
hold on
plot([735422 735422],[32 49],'Color',[.3 .3 .3]);
hold off
到现在为止我只得到了结果的一半。我想把条形图放在左边的轴上(y轴左边)和右边的线条图上。我想保留叶绿素指数在左边。
谢谢您的帮助
答
其实,这是一个真正伟大的问题,因为真的是有这样做的没有明确记载方式,并在所有的例子,无论是在右轴上显示在顶部。即使在这个example在他们自己的网站上,请注意他们多么小心地将bar
绘制在左侧轴上。
因此作为前言,yyaxis
不会创建单独的轴(如yyplot
所用),而是rather just applies an additional NumericRuler
to the same axes。如果它只是不同axes
我们可以用uistack
以我们想要的任何方式重新排列轴,但是因为它们是相同的axes
,所以我们需要仔细观察一下控制z轴顺序的属性内容。
当我们看这些属性时,yyaxis
会自动将轴的SortMethod
从其默认值depth
更改为children
。这使得出现在左轴上的任何物体都低于添加到右轴上的任何物体。因此,我们需要做的就是修改SortMethod
回到默认值(depth
),然后排序依赖于z位置,就像它通常在axes
内一样。
所以,作为一个示范,让我们创建一些数据
days = 0:5:35;
conc = [515 420 370 250 135 120 60 20];
temp = [29 23 27 25 20 23 23 17];
创建情节就像你一样(一条线,与右边的酒吧酒吧)
yyaxis right
b = bar(days, temp, 'FaceColor', [0.8 0.8 0.8]);
yyaxis left
p = plot(days, conc, 'LineWidth', 2);
现在,如果我们更改SortMethod
它会将线条对象置于顶部。
set(gca, 'SortMethod', 'depth')
谢谢。我喜欢你的建议,它几乎完成了这项工作。正如你在我的问题的图片上看到的那样,图表中的每个条都以黑色包围。所以当我应用你的代码集(gca,'SortMethod','深度')。 剧情的线条超出条形图的字体大小,但不会超出那些黑色条形边框。任何想法为什么? Btw:你怎么能像你在图上做的那样取出轴?你的条形图没有边框? –