You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas不遵循Matplotlib坐标轴设置?附示例代码

Pandas绘图不继承Matplotlib坐标轴设置的解决办法

这是个很常见的坑!问题出在Pandas绘图的机制上——它会默认创建新的坐标轴(Axes)实例,直接覆盖你之前用plt.gca()获取并配置好的那个,所以你的格式设置就失效了。下面给你两种靠谱的解决思路:

方法1:先绘图,再获取Pandas返回的Axes对象进行配置

Pandas的plot()方法会返回它使用的Axes对象,我们直接在这个对象上设置坐标轴格式就可以了:

import pandas as pd
from datetime import datetime, timezone
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import datetime as dt

# 生成测试数据
x = []
d = dt.datetime(2013, 7, 4)
for i in range(30):
    d = d + dt.timedelta(days=1)
    x.append(d)
y = range(len(x))
df = pd.DataFrame({'x': x, 'y': y})

# 先用Pandas绘图,获取返回的Axes对象
ax = df.plot(x='x', y='y', kind='bar', align='center')

# 在这个Axes上设置日期格式和定位器
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
ax.xaxis.set_major_locator(mdates.DayLocator(interval=5))

# 可选:旋转x轴标签避免重叠,调整布局
plt.xticks(rotation=45)
plt.tight_layout()

plt.show()

方法2:提前创建Axes,让Pandas复用它

我们可以先手动创建Figure和Axes,然后把Axes对象传给Pandas的plot()方法,强制它使用我们指定的坐标轴,这样提前设置的格式就能生效:

import pandas as pd
from datetime import datetime, timezone
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import datetime as dt

# 生成测试数据
x = []
d = dt.datetime(2013, 7, 4)
for i in range(30):
    d = d + dt.timedelta(days=1)
    x.append(d)
y = range(len(x))
df = pd.DataFrame({'x': x, 'y': y})

# 提前创建Figure和Axes
fig, ax = plt.subplots()

# 先设置坐标轴格式
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
ax.xaxis.set_major_locator(mdates.DayLocator(interval=5))

# 把Axes传给Pandas的plot方法,让它复用这个坐标轴
df.plot(x='x', y='y', kind='bar', align='center', ax=ax)

# 可选:优化标签显示
plt.xticks(rotation=45)
plt.tight_layout()

plt.show()

补充说明:确保你的x列是datetime类型(你的代码里已经满足这个条件了),Pandas对datetime类型的轴处理更友好,能更好地和Matplotlib的日期工具兼容。

内容的提问来源于stack exchange,提问作者stackoverflower

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:26:41