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)