Mar*_* M. 4 matlab plot bar-chart
在具有两个 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
Run Code Online (Sandbox Code Playgroud)
到现在为止,我只得到了一半的结果。我想将条形图放在左轴(y 轴左)上,将线图放在右轴上。我想将叶绿素指数保留在左侧。
感谢您的帮助
这实际上是一个非常好的问题,因为确实没有明确记录的方法来执行此操作,并且在所有示例中,右侧轴上的任何内容都显示在顶部。即使在他们自己网站上的这个例子中,也要注意他们bar在左轴上绘制 的小心程度。
所以,作为一个序言,yyaxis不会创建一个单独的轴(如yyplot使用),但而只是施加附加NumericRuler到同一个轴。如果只是不同,axes我们可以用uistack我们想要的任何方式对轴重新排序,但因为它们是相同的 axes,我们需要更仔细地查看axes控制内容 z 排序的属性。
当我们查看这些属性时,会yyaxis自动SortMethod将轴的更改为children默认值depth。这使得出现在左轴中的任何对象都低于添加到右轴的任何对象。所以我们需要做的就是解决这个问题,就是将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];
Run Code Online (Sandbox Code Playgroud)
像您一样创建图(一条线和一条条带在右侧)
yyaxis right
b = bar(days, temp, 'FaceColor', [0.8 0.8 0.8]);
yyaxis left
p = plot(days, conc, 'LineWidth', 2);
Run Code Online (Sandbox Code Playgroud)
现在,如果我们更改SortMethod它,它会将线对象置于顶部。
set(gca, 'SortMethod', 'depth')
Run Code Online (Sandbox Code Playgroud)