Я пытаюсь объединить временной ряд Панд и ряд вертикальных сегментов (маркеров) на одном графике. Ряд имеет частоту «Q-DEC» (квартал), которая в этом примере выводится из дат, но в реальной задаче является частью набора данных. Маркеры, как правило, не совпадают с сериями и могут появляться где угодно, необязательно в конце квартала.
Моя проблема в том, что если я сначала строю серию, а затем маркеры, позиции маркеров округляются до следующего конца квартала (верхний график). Если я сначала нанесу маркеры, а затем ряды, маркеры будут в правильных положениях, но метки с метками x не подходят (нижний график).
Q : Как я могу нанести маркеры в правильные позиции на графике временного ряда?
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()