pandas.plot()x轴刻度频率--如何显示更多刻度?

pandas.plot()x轴刻度频率--如何显示更多刻度?,pandas,matplotlib,Pandas,Matplotlib,我正在使用pandas.plot()绘制时间序列,希望每个月都显示为x记号 下面是数据集结构 下面是.plot()的结果 我试着使用其他帖子和matplotlib中的例子,做一些类似的事情 ax.xaxis.set_major_locator( dates.MonthLocator(revenue_pivot.index, bymonthday=1,interval=1)) 但这消除了所有的滴答声:( 我还试图传递xticks=df.index,但它没有改变任何东西 在x轴上显示更多

我正在使用pandas.plot()绘制时间序列,希望每个月都显示为x记号

下面是数据集结构

下面是.plot()的结果

我试着使用其他帖子和matplotlib中的例子,做一些类似的事情

ax.xaxis.set_major_locator(
   dates.MonthLocator(revenue_pivot.index, bymonthday=1,interval=1))
但这消除了所有的滴答声:(

我还试图传递
xticks=df.index
,但它没有改变任何东西


在x轴上显示更多刻度的正确方法是什么?

正确的方法如下所述 使用x_compat参数,可以抑制自动刻度分辨率调整


df.A.plot(x_compat=True)
无需将任何参数传递给
MonthLocator
。确保在
df.plot()中使用
x_compat
,根据@Rotkiv的回答调用

import pandas as pd
import numpy as np
import matplotlib.pylab as plt
import matplotlib.dates as mdates

df = pd.DataFrame(np.random.rand(100,2), index=pd.date_range('1-1-2018', periods=100))
ax = df.plot(x_compat=True)
ax.xaxis.set_major_locator(mdates.MonthLocator())
plt.show()

您还可以使用pandas
Timestamp
对象的属性“手动”格式化pandas
DateTimeIndex
的x轴刻度和标签

我发现这比使用
matplotlib.dates
中的定位器要容易得多,这些定位器适用于pandas以外的其他日期时间格式(如果我没有弄错的话),因此如果日期没有相应转换,有时会显示出奇怪的行为

下面是一个通用示例,它根据pandas
Timestamp
对象的属性将每个月的第一天显示为标签:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt


# data
dim = 8760
idx = pd.date_range('1/1/2000 00:00:00', freq='h', periods=dim)
df = pd.DataFrame(np.random.randn(dim, 2), index=idx)

# select tick positions based on timestamp attribute logic. see:
# https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Timestamp.html
positions = [p for p in df.index
             if p.hour == 0
             and p.is_month_start
             and p.month in range(1, 13, 1)]
# for date formatting, see:
# https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
labels = [l.strftime('%m-%d') for l in positions]

# plot with adjusted labels
ax = df.plot(kind='line', grid=True)
ax.set_xlabel('Time (h)')
ax.set_ylabel('Foo (Bar)')
ax.set_xticks(positions)
ax.set_xticklabels(labels)

plt.show()
收益率:


希望这有帮助!

如果您只想显示更多的蜱虫,还可以深入了解以下结构:


打印后,
格式化程序
是一个
时间序列(TimeSeries)日期格式化程序
,并且调用了
设置(u default)格式
,因此
self.plot(u obj.date)axis(u info)不是None
。您现在可以根据自己的喜好操作结构化数组
。日期(axis)info
,即包含更少的
b'
“%b”

您是否将日期解析为日期时间?@DemetriP谢谢。看起来这至少是问题的一部分。现在在使用ax.xaxis.set_major_定位器之后,我确实看到了滴答声……唯一的问题是,现在我每年只看到一个滴答声。显然,我使用MonthLocator是错误的。对我不起作用。Python 3.6,pandas 0.19.2。知道为什么吗?我也是,python 3.6和pandas 0。22@seanysull用准确的信息修复应该很简单。不幸的是,这个问题没有答案,因此很难判断您的数据帧etc是否与OPs设置相同(因为OPs回答自己,他们可能在“幕后”做了一些事情修复了问题).我个人会问另一个问题,链接到这个问题,解释为什么这对你不起作用。为什么策划这么乏味
dai = ax.xaxis.minor.formatter.plot_obj.date_axis_info
dai['fmt'][dai['fmt'] == b''] = b'%b'