如何在 2 个地块的水平线上显示年份数据?

How to show the Year data in the horizontal lines of 2 plots?

我对情节有疑问。我有一个名为 log_return_data 的数据框。 这是数据框的快照:

我想在 1 个地块和相应的时间(在索引列中)中绘制每个 returns 的 3 个地块。 这是我写的代码:

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 个图)中。 无论如何解决这个问题? 谢谢。

##编辑: 在第一个回答者的帮助下,我将代码更改为:

log_return_data['HPQ_Returns'][1377:].plot(ax=axis[0], title='HPQ', fontsize=8, linewidth=0.6)

这是结果:

如何删除每个情节 x-axis 中的 3 个标题 'Date'?

由于所有三个图的时间索引相同,您可以在所有三个 plot 调用中使用 sharex=False(这是默认设置)并且您应该获得所有 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()