MATLAB:在X轴上绘制时间 - 重叠标签

3

我在绘制x轴上的时间时遇到了困难。 我有一些重叠的标签。 如下图所示:

plot

这是我的代码:

time=datenum(0,0,0,0,0,timeinseconds);
labs=1:10:length(time);

figure(3);
plotyy(time,xvalue,time,dens);
datetick('x','HH:MM');
set(gca,'XTick',time(labs),'XTickLabel',time(labs)); 
legend('xval','CDF');
title('Crash on Oct.10 2008 at 15:59pm');
xlabel('Time');

首先,为什么新的标签与旧的标签重叠?其次,我该如何使标签旋转90度?我尝试了其他一些matlab函数来旋转标签,但似乎没有一个能够处理时间格式的标签。

1个回答

3

调用plotyy时,您将创建两个axis对象。您的重叠问题可能来自于您仅修改其中一个轴集,而将另一个轴保留为最初设置。

一种选择是在调用plotyy时处理所创建的两个轴:

[AX, H1, H2] = plotyy( time, xvalue, time, dens);

您的第一选择是通过更改 'XTick' 属性来设置包含在处理程序数组 AX 中的两个轴,如下所示:
set( AX(1), 'XTick', time(labs), 'XTickLabel', time(labs));
set( AX(2), 'XTick', time(labs), 'XTickLabel', time(labs));

但是你也可以选择将第二个轴的标签留空,替换上面的第二行:

set( AX(1), 'XTick', time(labs), 'XTickLabel', time(labs));
set( AX(2), 'XTick', time(labs), 'XTickLabel', []);

官方文档 plotyy 使用多个X轴和Y轴可能对您有所帮助。


如果您看一下那个例子,即plotyy文档:
figure
x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');

和之前一样,尝试仅修改AX(2),这等同于使用gca所得到的结果:

set(AX(2),'XtickLabel',1:0.1:20)

你会注意到相同的重叠错误发生了。
关于将标签旋转90度,很遗憾目前Matlab不支持。但是,您可以使用FileExchange上可用的包之一来完成此操作。 xticklabelrotateRotate Tick Label 可能是其中之一。

谢谢你的帮助!但是当我实施你的建议时,出现了一个错误:“使用set时出错。值必须是数字。” - Plug4
我认为 datetick('x','HH:MM'); 可能是问题所在。 - Plug4
1
我已经更新完整个示例。你的错误可能出现在变量 xvaluetimedenslabs 上。但如果你怀疑是 datetick 函数导致的问题,可以尝试将其作为 datetick(AX(1),'x','HH:MM') 使用来修改第一个轴 x 坐标的标签。 - Drodbar
太棒了!我按照以下方式解决了代码:[AX,H1,H2] = plotyy(time,xvalue,time,dens); set(AX(1),'XTick',time(labs),'XTickLabel',time(labs)); set(AX(2),'XTick',time(labs),'XTickLabel',time(labs)); datetick(AX(1),'x','HH:MM'); datetick(AX(2),'x','HH:MM'); - Plug4
好的。这基本上就像我在第二个片段中展示的那样,所以你保持了XTickLabel中填充相同数据并将其叠加在另一个上面。很高兴它有帮助。 - Drodbar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接