Matlab中如何将折线图的横坐标刻度改为日期/时间

用Matlab画随日期变化的折线图是常见操作了。但在画图的过程中,横坐标刻度往往是序号索引而不是对应日期。这次画降水折线图时又遇到了这个问题,如何将横坐标刻度修改成对应的时间?这次尝试的办法是先用日期对应的序号索引作为x轴进行画图,将要用到的日期单独存储为字符串数组。再用xticks设置刻度位置,用xticklabels更改对应的刻度值,核心代码如下

plot(x, y,'-o','lineWidth',1.5,'color','#0072BD','MarkerSize',3,...
    'MarkerEdgeColor','b',...
    'MarkerFaceColor','b')
x1 = 1:6:length(x);
xticks(x1)
time1=time(1:6:end,:);
xticklabels(time1)

1996-2006年上海、广州两地月际降水量折线图

具体情况如下所示。有广州和上海两地1996-2006年的11年以来每月的降雨量数据,Year和Month分别是年月,Index是人为添加的索引号,在Excel里直接拉一下就行。

降水数据格式

首先利用下面的代码,在Matlab中读取该txt文件。把Year、Month利用strcat函数串联起来,得到格式如“1996.9”的字符串数组time,此时time的数据类型是132×7的char数组。x是132×1的double数组,即上图第三列里的Index。

file = 'rain_data.txt';
data = readmatrix(file);
year=data(:,1);
month=data(:,2);
x=data(:,3);
y = data(:, 4); 
z = data(:, 5); 
time=strcat(num2str(year),'.',num2str(month));

读取完之后就可以用plot画图了。因为刻度太多会挤在一起不美观,所以设置了步长为6,也即每隔6个月做一次刻度。x1用于规定在哪里画刻度,time1用于从time中提取出对应的刻度值,用xticklabels替换坐标区原有的刻度值。

plot(x, y,'-o','lineWidth',1.5,'color','#0072BD','MarkerSize',3,...
    'MarkerEdgeColor','b',...
    'MarkerFaceColor','b')
hold on

plot(x, z,'-o','lineWidth',1.5,'MarkerSize',3,...
    'MarkerEdgeColor','r',...
    'MarkerFaceColor','r')

x1 = 1:6:length(x);
xticks(x1)
time1=time(1:6:end,:);
xticklabels(time1)
xlabel('Month')
ylabel('Rainfall(mm)')
legend('Shanghai','Guangzhou')
title('Changes in Monthly Precipitation in Guangzhou and Shanghai from 1996 to 2006')
hold off

最后就能得到文章开头放的那张1996-2006年广州、上海两地降雨量分布图了。这个方法还是比较简单的,但是需要手动创建索引,对于数据量较大的情况还是比较麻烦。不过能满足现有需求还是不错的,有更好的办法以后遇到了再更新~

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值