【发布时间】:2018-10-16 18:47:00
【问题描述】:
我正在尝试将 Pandas 时间序列和多个垂直段(标记)组合在同一个图中。该系列的频率为“Q-DEC”(季度),在此示例中是从日期推断的,但实际问题是数据集的一部分。标记通常不与系列对齐,可能出现在任何地方,不一定在季度末。
我的问题是,如果我先绘制系列然后绘制标记,则标记的位置会四舍五入到该季度的下一个结尾(上图)。如果我先绘制标记,然后绘制系列,则标记位于正确的位置,但 x 刻度标签不合适(下图)。
问:如何在时间序列图的正确位置绘制标记?
import datetime
import pandas as pd
from pandas import Timestamp
import matplotlib.pyplot as plt
data = pd.DataFrame({0: {Timestamp('2017-03-31'): 1,
Timestamp('2017-06-30'): 2,
Timestamp('2017-09-30'): 3,
Timestamp('2017-12-31'): 3,
Timestamp('2018-03-31'): 2,
Timestamp('2018-06-30'): 1}})
ax = plt.subplot(2,1,1)
data[0].plot(ax=ax,style="-mo")
ax.axvline(pd.Timestamp(datetime.date(2017, 7, 1)), c='r')
ax.axvline(pd.Timestamp(datetime.date(2017, 8, 10)), c='g')
ax.axvline(pd.Timestamp(datetime.date(2017, 9, 20)), c='b')
ax.axvline(pd.Timestamp(datetime.date(2017, 11, 30)), c='k')
ax = plt.subplot(2,1,2)
ax.axvline(pd.Timestamp(datetime.date(2017, 7, 1)), c='r')
ax.axvline(pd.Timestamp(datetime.date(2017, 8, 10)), c='g')
ax.axvline(pd.Timestamp(datetime.date(2017, 9, 20)), c='b')
ax.axvline(pd.Timestamp(datetime.date(2017, 11, 30)), c='k')
data[0].plot(ax=ax,style="-mo")
plt.show()
【问题讨论】:
标签: python python-3.x pandas matplotlib time-series