У меня есть pandas DataFrame stock_open
, который содержит цены акций против дат и выглядит так:
Я хочу построить график временных рядов акций цены по сравнению со столбцом даты и показывают возрастающие даты путем построения вертикальной линии для каждой даты. Я хочу добиться этого путем построения графиков на несколько дат, сохранения этих графиков в виде отдельных изображений и последующего использования ffmpeg, чтобы объединить их в видео. Итак, я сделал это:
import matplotlib.pyplot as plt
import seaborn as sns
my_dates = ['2019-11-20', '2019-12-20', '2020-01-20', '2020-02-20', '2020-03-20']
fig, [[ax1, ax2], [ax3, ax4]] = plt.subplots(nrows=2, ncols=2, figsize=(20, 8))
sns.lineplot(x='Date', y='value', hue='variable',
data=pd.melt(stock_open, ['Date']), ax=ax3)
ax3.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plot_no = 0
for i in range(len(my_dates)):
my_selected_date = my_dates[i]
ax3.axvline(my_selected_date)
ax3.set_title(str(my_selected_date))
fig.savefig('output_images/stock_image_{plot_no:04d}.png'.format(plot_no=plot_no))
plot_no += 1
Все работает нормально, за исключением того, что вертикальная линия «сохраняется» на фигурах во всех итерациях.
Первое изображение, как и ожидалось:
Но изображения из следующих итераций в l oop имеют вертикальную линию из предыдущей итерации:
(изображения обрезаны намеренно)
Я хочу удалить вертикальную линию из предыдущих итераций.
Я подумал об использовании анимации из matplotlib, но другие подфигуры также должны быть обновлены и сохранены в этом процессе.
Есть ли способ сделать это, не начиная с самого начала? Первоначально я хотел показать движущийся сюжет с датой, но не смог этого добиться. Поэтому я использовал эту стратегию, чтобы показать обновления на рисунке.
TIA!