matlab - 绘制时间序列时如何调整网格密度
问题描述
绘制时间序列时有没有办法调整网格密度?
例如,从包含数据 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 个网格标签。
我应该如何调整水平轴的网格密度?
我从这个答案中学到了一种生成自定义网格点的方法。我很想学习任何不同的方法。也许有一种更简单的方法,因为要求从自定义网格点放宽到自定义网格密度?
解决方案
MATLAB 网格线是根据xticks和yticks的位置绘制的。因此,对于您的情况,您可以更改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)
推荐阅读
- javascript - 为什么我无法访问我的 node.js 基本公共 API?
- java - 想要java代码检查传入文件的目录,验证现有文件并将邮件发送给带有文件名、时间戳的收件人
- wso2 - 使用 API Manager 进行 API 分析的错误
- java - 如何将数据从片段传递给活动?
- flutter - Flutter:在 SharedPreferences 中保存和获取多个值
- ios - SwiftUI:如何使用边距 10 修复前导和尾随
- java - 如何在邻接矩阵的广度优先搜索中跟踪每个顶点的深度?(爪哇)
- python - 将元组列表中的 y 坐标与条件进行比较
- windows - 无法终止在后台运行的 VMware 虚拟机
- vue.js - 路由器链接不呈现