Pandas 绘图 在 x 轴上显示所有日期值(matplolib 仅显示几个值),格式为 MMM-YYYY

dra*_*rys 1 python matplotlib pandas

import os\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport datetime\n\ndf = pd.read_excel(DATA_DIR+"/"+file_list[0], index_col="Date")\ndf.head(5)\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n
smooth = df[\'Pur. Rate\'].rolling(window=20).mean()\nsmooth.plot()\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n

我得到下图,需要在 x 轴上绘制每个月年的所有日期值。\n我想以 (Feb-19) 格式显示 x 轴上对角格式化的所有月份和年份。我可以将绘图的大小调大以适应所有情况,因为我会将其另存为 jpg。

\n

我希望 x 轴具有以下值:\nJan 16, Feb 16, Mar 16, Apr 16, May 16, Jun 16, Jul 16, Aug 16, Sep 16, Oct 16, Nov 16, Dec 16, Jan 17, Feb 17 \xe2\x80\xa6\n(我想显示所有这些值,matplotlib 自动截断这个,我想避免这种情况)

\n

Mr.*_*. T 5

正如评论中提到的,您必须设置定位器和格式化程序。这在 matplotlib 文档中对一般图形单独的日期时间轴进行了很好的解释。另请参阅TickLocators的说明。格式化代码源自 Python 的strftime() 和 strptime() 格式代码

from matplotlib import pyplot as plt
import pandas as pd
from matplotlib.dates import MonthLocator, DateFormatter


#fake data
import numpy as np
np.random.seed(123)
n = 100
df = pd.DataFrame({"Dates": pd.date_range("20180101", periods=n, freq="10d"), "A": np.random.randint(0, 100, size=n), "B": np.random.randint(0, 100, size=n),})
df.set_index("Dates", inplace=True)
print(df)

ax = df.plot()

#defines the tick location 
ax.xaxis.set_major_locator(MonthLocator())
#defines the label format
ax.xaxis.set_major_formatter(DateFormatter("%b-%y"))
ax.tick_params(axis="x", labelrotation= 90)

plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)

示例输出:![在此输入图像描述