【问题标题】:Equidistant Date Axis on Non equidistant time points非等距时间点上的等距日期轴
【发布时间】:2013-06-28 11:31:00
【问题描述】:

所以我的 x 轴是基于不均匀间隔的时间刻度,有些点会在 2-4 秒内发生,而其他点可能需要一个小时。

当使用 datetick 时,似乎这些点被移动了,使得在短时间间隔内发生的点被压缩,而其他点被隔开。无论如何,是否允许 x 轴是均匀的空间,并且仍然可以通过时间正确标记?我不希望 Matlab 以不同的方式分隔我的数据点。

【问题讨论】:

  • 你不能只根据时间戳的索引而不是它们的值来绘制吗?如果x 包含时间,而不是在x 上绘图,您可以在1:numel(x) 上绘图
  • @MohsenNosratinia 如果我这样做,我怎么知道发生了什么时间?
  • 我无法重现这个...你能提供一些示例数据吗?
  • 确定它们是被压缩的,而且不仅仅是缩放问题吗?即,我仍然可以放大到相距很近的点并看到它们是不同的
  • @RodyOldenhuis 如果我放大数据,这绝对是一个缩放问题,但是“视觉上”它在某些区域与其他区域的绘图中的间距不同。我希望无论时间如何都能均匀地缩放所有内容。

标签: matlab


【解决方案1】:

您不能要求datetick 重新排列x 轴上的数据点。你必须在此之前均匀地绘制它。不要使用时间戳,而是使用它们的索引,然后让 datestr 标记它们。请参阅下面的示例

timeStamps = {'00:00:01' '00:00:04' '01:05:09' '02:06:53' '05:08:09'};
xData = datenum(timeStamps);

yData = (1:numel(xData)).^2;

subplot(211)
plot(xData, yData)
set(gca, 'XTick', xData)
datetick('x', 'HH:MM:SS', 'keepticks')

subplot(212)
plot(1:numel(xData), yData)
set(gca, 'XTick', 1:numel(xData))
set(gca, 'XTickLabel', datestr(xData, 'HH:MM:SS'));

结果

【讨论】:

  • 这是一个非常好的解决方案 - 它均匀地分隔点,并用相应的日期标记每个点。您可能想要更新您的解决方案以显示如何在标签中给出日期和时间(或只是时间),因为有些点是“相隔几秒”的。另外 - 如果有十几个点,标签会重叠:你能展示在这种情况下如何垂直对齐它们吗?
  • 这是一个很好的问题演示。它也在一定程度上解决了它。如果您有很多点,则很难阅读情节,例如100-200 个数据点。无论如何要为此添加水平滚动?
  • @Floris 我更新了时间刻度。至于重叠标签,我不知道一个简单的解决方案。像mathworks.com/matlabcentral/fileexchange/3486 这样的解决方案有助于将它们旋转 90 度。这在某些情况下会有所帮助。
  • 太棒了。我看不出有什么理由不应该接受它作为正确的解决方案——我认为这很好地解决了上述问题。
  • 以上内容结合以下内容:mathworks.com/matlabcentral/fileexchange/… 将允许您使用 N 个点。好东西。谢谢!
猜你喜欢
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 2020-07-11
相关资源
最近更新 更多