У меня вопрос по сюжетам. У меня есть фрейм данных с именем log_return_data. Вот снимок кадра данных:
Я хочу построить 3 графика каждого возврата на 1 графике и в соответствующее время (в индексе столбца). Вот код, который я написал:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
fig1, axis = plt.subplots(3,1,figsize=(9,6),dpi=100)
log_return_data['HPQ_Returns'][1377:].plot(ax=axis[0], title='HPQ', fontsize=8, sharex=True, linewidth=0.6)
log_return_data['MSFT_Returns'][1377:].plot(ax=axis[1], title='MSFT', fontsize=8,sharex=True, linewidth=0.6)
log_return_data['INTC_Returns'][1377:].plot(ax=axis[2], title='INTC', fontsize=8,sharex=True, linewidth=0.6)
plt.savefig('returns')
И это результат:
Однако я хочу, чтобы данные года были не только на последнем графике (данные INTC), но также и в HPQ и MSFT (2 первых графика). Есть ли хоть какое-то решение этой проблемы? Спасибо.
##Редактировать : С помощью 1-го ответчика я меняю код на:
log_return_data['HPQ_Returns'][1377:].plot(ax=axis[0], title='HPQ', fontsize=8, linewidth=0.6)
Как удалить 3 заголовка «Дата» по оси X каждого графика?
Поскольку временной индекс одинаков для всех трех графиков, вы можете использовать sharex=False
во всех трех вызовах plot
(что используется по умолчанию), и вы должны получить все xticks и при этом правильно выровнять графики:
log_return_data['HPQ_Returns'][1377:].plot(ax=axis[0], title='HPQ', fontsize=8, sharex=False, linewidth=0.6)
log_return_data['MSFT_Returns'][1377:].plot(ax=axis[1], title='MSFT', fontsize=8,sharex=False, linewidth=0.6)
log_return_data['INTC_Returns'][1377:].plot(ax=axis[2], title='INTC', fontsize=8,sharex=False, linewidth=0.6)
sharex=True
будет генерировать другое выравнивание графиков, когда у вас есть разные ряды с разными временными индексами, которые не совпадают идеально, но это не ваш случай.
Поскольку теперь заголовки перекрываются как с меткой оси, так и с метками осей, вы можете попробовать следующее перед plt.savefig()
:
# This removes the 'Date' label from every axis except the last.
for ax in axis[:-1]:
ax.set_xlabel('')
# This rearranges the layout (the title still would overlap with the tick labels).
plt.tight_layout()
@mht я отредактировал свой ответ, проверьте, работает ли он
Спасибо за ваше решение. Однако это работает хорошо, теперь заголовок оси x перекрывается с заголовком каждого графика. Знаете ли вы, как удалить заголовок оси X и сохранить данные по оси X? Я загрузил изображение нового сюжета в вопросе выше.