我有两个不同年份的时间序列存储在数据框中。例如:
data15 = pd.DataFrame(
[1,2,3,4,5,6,7,8,9,10,11,12],
index=pd.date_range(start='2015-01',end='2016-01',freq='M'),
columns=['2015']
)
data16 = pd.DataFrame(
[5,4,3,2,1],
index=pd.date_range(start='2016-01',end='2016-06',freq='M'),
columns=['2016']
)
我实际上是在处理日常数据,但如果这个问题得到充分的回答,我可以找出其余的问题
我想做的是将这些不同数据集的图叠加到一个单独的图上,从1月到12月,比较不同年份之间的差异。我可以通过为其中一个数据集创建一个“假”索引来实现这一点,以便它们有一个共同的年份:
data16.index = data15.index[:len(data16)]
ax = data15.plot()
data16.plot(ax=ax)
但如果可能的话,我想避免弄乱索引。这种方法的另一个问题是,年份(2015年)将出现在我不想要的x轴刻度标签中。有人知道更好的方法吗
您可以使用pandas.DatetimeIndex.dayofyear来获取日数,这将允许您将两个不同年份的数据相互叠加
我看到两种选择
选项1:将
month
列添加到数据帧中选项2:如果不想这样做,可以直接使用
matplotlib
不用说,我会推荐第一种选择
一种方法是在第一个数据帧上覆盖一个透明的轴,并在该数据帧中绘制第二个数据帧,但是您需要同时更新两个轴的x限制(类似于
twinx
)。然而,我认为这需要做更多的工作,并且还有一些缺点:例如,你不能再轻松地以交互方式缩放到一个特定区域,除非你确保两个轴都通过它们的x限制链接。实际上,最简单的方法是通过“弄乱索引”来考虑这种抵消对于勾号标签,您可以通过指定x勾号格式轻松更改格式,使其不显示年份:
请看一下matplotlib API example for specifying the date format
相关问题 更多 >
编程相关推荐