Skip to main content
 首页 » 编程设计

python之如何更改 Pandas 时间序列图的 x-ticks 密度

2025年05月04日8freeliver54

我正在尝试生成一个较小的图形来可视化 Pandas 时间序列。然而,自动生成的 x-ticks 不适应新的大小并导致重叠的刻度。我想知道如何调整 x-ticks 的频率?例如。对于这个例子:

figsize(4, 2) 
 
num = 3000 
X = linspace(0, 100, num=num) 
dense_ts = pd.DataFrame(sin(X) + 0.1 * np.random.randn(num), 
                        pd.date_range('2014-01-1', periods=num, freq='min')) 
 
dense_ts.plot() 

我得到的数字是:

我可以使用 Matplotlib 日期绘图来解决这个问题,但这不是一个非常优雅的解决方案 - 代码要求我根据每个案例指定所有输出格式。

figsize(4, 2) 
 
from matplotlib import dates 
 
fig, ax = plt.subplots() 
ax.plot_date(dense_ts.index.to_pydatetime(), dense_ts, 'b-') 
ax.xaxis.set_minor_locator(dates.HourLocator(byhour=range(24), 
                                           interval=12)) 
ax.xaxis.set_minor_formatter(dates.DateFormatter('%H:%m')) 
ax.xaxis.set_major_locator(dates.WeekdayLocator()) 
ax.xaxis.set_major_formatter(dates.DateFormatter('\n\n%a\n%Y')) 
 
plt.show() 

我想知道是否有办法使用 pandas plotting 模块或通过设置一些 axes 对象属性来解决这个问题?我尝试使用 ax.freq 对象,但实际上什么也做不了。

请您参考如下方法:

您可以传递要在 dense_ts.plot() 中显示的 x 轴值列表

dense_ts.plot(xticks=['10:01','22:01'...]) 

为清楚起见的另一个例子

df = pd.DataFrame(np.random.randn(10,3)) 

绘图时不指定 xticks

df.plot(legend=False) 

用 xticks 参数绘图

df.plot(xticks=[2,4,6,8],legend=False)