Matplotlib与Pandas结合时对fig、ax、plt的理解

Posted

技术标签:

【中文标题】Matplotlib与Pandas结合时对fig、ax、plt的理解【英文标题】:Understanding of fig, ax, and plt when combining Matplotlib and Pandas 【发布时间】:2021-05-30 07:25:03 【问题描述】:

在结合 Matplotlib 和 Pandas 进行绘图时,我试图更好地了解图形、轴和 plt 是如何组合在一起的。接受的answer here 帮助我以我通过这一行理解的面向对象的方式连接了 Matplotlib 和 Pandas:

fig, ax = plt.suplots()
df.plot(ax=ax)

但随着我的深入,answer here 让我失望了。具体来说,我仍然有需要直接从 plt 调用的方法,这些方法不适用于图形或轴。示例:

fig, ax = plt.subplots()

df[['realgdp','trend']]["2000-03-31":].plot(figsize=(8,8), ax=ax)
ax.set_title('Real GDP & Trend')
ax.set_ylabel('Readl GDP')

plt.xticks(rotation=45)

如果我尝试从 ax 或 fig 中调用 xticks(rotation=45),则会收到一个错误,即 ax 和 fig 都没有 xticks 方法。我上面的解决方案有效,但我不明白为什么。

当我输入plt.xticks(rotations=45) 时,该信息会发送到哪里?为什么answer here 中的评论“当您使用模块 pyplot 上可用的功能时,您正在绘制到 '当前图形' 和 '当前轴'”在这种情况下不适用?为什么要直接取消plt?

【问题讨论】:

【参考方案1】:

plt.xticks() 仅适用于“当前”斧头。您应该改用ax.set_xticks()ax.set_xticklabels()ax.tick_params()

plt.xticks() 是一个相当古老的函数,仍然受支持,模仿类似的 matlab 代码,诞生于人们只在一个绘图上绘图的时代。较新的功能更通用,提供更多选项。

简而言之:您不需要直接调用plt,而是邀请您使用ax 函数。当调用plt.xticks() 时,它会被重新路由到当前活动的ax(通常是最后一个创建的)。

【讨论】:

这为我填补了缺失的点。我能够用 ax.tick_params(axis='x', rotation=45) 替换 plt.xticks(rotation=45)。现在我可以将 pandas 和 Matplotlib 以一种快乐、合理、面向对象的方式交织在一起。谢谢!

以上是关于Matplotlib与Pandas结合时对fig、ax、plt的理解的主要内容,如果未能解决你的问题,请参考以下文章

与 RFECV 结合时如何在 Gridsearch 中使用“max_features”?

在 iOS7 中将搜索栏与导航栏结合时 UISearchbar 空间为空?

与科学记数法 kableExtra table R markdown html 结合时,十进制后的数字不一致

使用 matplotlib 的 savefig 保存从 python pandas 生成的图(AxesSubPlot)

Pandas Matplotlib:如何更改散点图中图例的形状和大小?

当人工智能和大数据成功结合时会发生什么?