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
相关产品推荐
相关产品推荐

