Matlab 绘制顶部轴(长方体)线

Matlab 绘制顶部轴(长方体)线,matlab,matlab-figure,matlab-hg2,Matlab,Matlab Figure,Matlab Hg2,我有一个带有两条线和两个不同x轴(不同的数据单位)的图,我的图如下所示 我的问题是,我想把框的顶线也画成黑色(水平),而不是像现在这样“打开”。如果这条线也有x轴记号,与底部水平轴线相同,那就太好了 显然,上的网格不起作用,因为它在右侧绘制y1轴记号,在左侧绘制y2轴记号,这是我不想要的 另外,我认为在Matlab2014中,这是可行的:set(ax(2),'XAxisLocation','top','XTickLabel',[])但在Matlab2015a中不再如此 下面是一个例子: figu

我有一个带有两条线和两个不同x轴(不同的数据单位)的图,我的图如下所示

我的问题是,我想把框的顶线也画成黑色(水平),而不是像现在这样“打开”。如果这条线也有x轴记号,与底部水平轴线相同,那就太好了

显然,上的
网格不起作用,因为它在右侧绘制y1轴记号,在左侧绘制y2轴记号,这是我不想要的

另外,我认为在Matlab2014中,这是可行的:
set(ax(2),'XAxisLocation','top','XTickLabel',[])但在Matlab2015a中不再如此

下面是一个例子:

figure(1);
x = [0, 1, 2, 3];
y_1 = [3, 2, 1.5, 1];
y_2 = [0, 0.5, 0.7, 0.9];
parula_blue = [0, 0.447, 0.741]; parula_red = [0.85, 0.325, 0.098];

[ax, h1, h2] = plotyy(x, y_1, x, y_2);
set(get(ax(1),'Ylabel'),'String','Data 1', 'Color', 'k');
set(h1,'LineWidth',2,'LineStyle','-','Color',parula_blue,'DisplayName', 'Name 1');
set(ax(1),'ycolor',parula_blue);
set(ax(1), 'YTick', [0 1 2 3 4]);
set(ax(1), 'ylim', [0 4]);

set(get(ax(2),'Ylabel'),'String','Data 2', 'Color', 'k');
set(h2,'LineWidth',2,'LineStyle','--','Color',parula_red,'DisplayName','Name 2');
set(ax(2),'ycolor',parula_red);
set(ax(2),'YDir','reverse');
set(ax(2), 'YTick', [0 0.2 0.4 0.6 0.8 1]);

xlabel('X axis desc')
legend('show')
set(ax, 'XTick', x)

set(ax(1),'Box','off') % Turn off box of axis 1, which removes its right-hand ticks
set(ax(2),'Box','off') % Turn off box of axis 2, which removes its left-hand   ticks

基于,您只需将另一个
轴添加到绘图中,并指定其水平轴位于顶部(此代码位于代码末尾):

编辑: 根据OP在评论中的说明,可以通过对图形的子对象重新排序,在蓝色\橙色的“下方”绘制黑色轴,也就是说,在我的上述代码之后,添加:

uistack(hBox,'bottom'); %// This sends the black axes to the back.
ax(1).Color = 'none';   %// This makes the plot area transparent for the top axes, so 
                        %// that ticks belonging to the black axes are visible.



顺便说一句,我记得当我想要使用不同颜色的次要和主要网格线时,我使用了类似的技巧-每组网格线都属于自己的轴,具有自己的
color

如果您想避免添加另一组
,您仍然可以使用
ax(2)
,但您需要首先使其可见:

ax(1).Box = 'off';
ax(2).Box = 'off';
ax(2).XAxis.Visible = 'on';
ax(2).XAxisLocation = 'top';
ax(2).XTickLabel = [];
ax(2).XTick = ax(1).XTick ;

添加
暂停
绘图([03],[4-0.001 4-0.001],'k')
,怎么样?这对你来说行吗?@AnderBiguri:它看起来有点难看,它看起来不太像底部的轴线,而且在
0
/
4
处,它不会以同样的方式透支橙色/蓝色刻度。而且它没有轴刻度。我想这是最后的解决办法,但看起来不太好。我同意,只是值得一试;)出于好奇(我没有R2015)当您使用
集合(ax(2),'XAxisLocation','top','XTickLabel',[])时,实际会发生什么情况?你收到错误信息了吗?这太奇怪了,它不再工作了。@AnderBiguri有什么理由减去
0.001
?如果我只使用
…[4],…
,看起来会更好。您的解决方案在蓝色的左y轴上绘制黑色。在这种情况下,这是绝对不可能的(我想你可能没有注意到)。你能避免吗?另外,在顶行,我想画记号,但不是标签(0,1,…)。这是一些Matlab魔法。工作完美。非常感谢你!
ax(1).Box = 'off';
ax(2).Box = 'off';
ax(2).XAxis.Visible = 'on';
ax(2).XAxisLocation = 'top';
ax(2).XTickLabel = [];
ax(2).XTick = ax(1).XTick ;