首页 > 解决方案 > 绘制时间序列时如何调整网格密度

问题描述

绘制时间序列时有没有办法调整网格密度?

例如,从包含数据 here的 csv 文件开始,其时间点是自去年 2 月以来的每一天。

T=readtable(filename); % filename is the full file name of the csv file
ts=timeseries([T{:,2}],cellstr([T{:,1}]));
plot(ts,'.')
grid on

结果是绘图正确且 4 个网格标签间距适当。但同时,对于 502 个时间点,只有 4 个网格标签。

我应该如何调整水平轴的网格密度?


我从这个答案中学到了一种生成自定义网格点的方法。我很想学习任何不同的方法。也许有一种更简单的方法,因为要求从自定义网格点放宽到自定义网格密度?

标签: matlabmatlab-figure

解决方案


MATLAB 网格线是根据xticksyticks的位置绘制的。因此,对于您的情况,您可以更改xticks属性以调整水平网格线密度。


xticks()您可以使用和函数检查当前刻度yticks(),它会为您提供当前刻度位置的数组。例如,在用您的数据制作散点图后,我可以这样做:

>> xticks()

ans = 

  1×8 datetime array

   2020-01-01   2020-04-01   2020-07-01   2020-10-01   2021-01-01   2021-04-01   2021-07-01   2021-10-01

在这种情况下,要设置一个新xticks值,我需要给函数一个datetime类型数组,因为 x 值是一个datetime类型。

因此,如果我想每 30 天绘制一条网格线,您可以执行以下操作:

% Generate an array of datetime from the first date in your data,
% then incrementing by 30 days until the last day in your data.
tick = your_data.date(1) + (0:30:length(your_data.date))
% Update xticks location
xticks(tick)

示例更新的 xtick 位置


推荐阅读