Matplotlib - Python 无法获取每月显示的小刻度标签

2ya*_*yan 3 python matplotlib

这是我的代码:

from matplotlib.ticker import FuncFormatter
import pandas as pd
import numpy as np
from datetime import datetime
from matplotlib import pyplot as plt

dates = pd.date_range('01/01/2016', datetime.today(), freq = 'M')
X = pd.DataFrame(index = dates)
X['values'] = np.random.rand(len(X)) * 300

fig, ax = plt.subplots()
fig.set_size_inches(8 * phi, 8 )
X['values'].plot(ax = ax)
ax.yaxis.set_major_formatter(FuncFormatter(lambda x, pos: '$ {:,.0f}'.format(x)))
plt.show()
Run Code Online (Sandbox Code Playgroud)

无法每月显示

我已经尝试了半个小时了,我真的需要一些帮助。

在 x 轴的小刻度标签上显示其他月份的最干净、最简单的方法是什么?只显示以 J 开头的月份,而不是出于某种原因想要执行的操作。...

注意:我确实安装了海运。

Imp*_*est 5

首先,为了能够在 pandas 日期图上使用 matplotlib 代码,您需要设置兼容性选项x_compat=True

X.plot(ax = ax, x_compat=True)
Run Code Online (Sandbox Code Playgroud)

接下来,为了格式化 x 轴,您需要使用xaxis. 为了设置次要刻度标签,您需要使用set_minor_formatter.

为了将一些价格变动分配给某些位置,您需要Locator一个而不是Formatter.

现在看来您想要完全控制输出图,因此您需要设置主要次要定位器格式化程序。

请注意,每月贴标签肯定会让标签重叠。因此需要更大的数字或更小的字体大小。

fig, ax = plt.subplots(figsize=(12,3))

X.plot(ax = ax, x_compat=True)

ax.xaxis.set_major_locator(mdates.YearLocator())
ax.xaxis.set_minor_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter("\n%Y"))
ax.xaxis.set_minor_formatter(mdates.DateFormatter("%b"))

plt.setp(ax.get_xticklabels(), rotation=0, ha="center")
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述