python - 子图 python Matplotlib 不使用 groupby().sum()
问题描述
在这段代码中,我尝试在一个图中显示相同的图 4 次。
faiGraficoBarh( parolePerAutore(dfPulito), 'message for every person','x','y', 2,2,1)
faiGraficoBarh( parolePerAutore(dfPulito), 'message for every person','x','y', 2,2,2)
faiGraficoBarh( parolePerAutore(dfPulito), 'message for every person','x','y', 2,2,3)
faiGraficoBarh( parolePerAutore(dfPulito), 'message for every person','x','y', 2,2,4)
plt.show()
parolePerAutoreMethod
返回一个数据框:
def parolePerAutore(df):
return df[['author', 'wordCount', 'letterCount']].groupby('author').sum()
制作情节的方法faiGraficoBarh
是:
def faiGraficoBarh(table, titolo , x ,y, nrow, ncol, fig):
plt.subplot(nrow,ncol,fig)
table.head(10).plot.barh()
plt.title(titolo)
plt.xlabel(x)
plt.ylabel(y)
问题在于plt.show
它生成 5 个图形后:一个包含绘图,4 个仅包含 4 个不同位置的轴。
这是我看到的一个例子
解决方案
当您有多个子图时,熊猫图需要ax
绘制。最简单的解决方案是使用“当前斧头”,如table.head(10).plot.barh(ax=plt.gca())
. 当前的斧头由plt.subplot()
命令更改。
请注意,该subplot()
函数是一个旧结构,类似于 Matlab 的。在较新版本的 matplotlib 中有plt.subplots
更易于管理的参数,它可以创建图形和轴。还有一个参数gridspec_kw={'hspace': 0.4, 'wspace': 0.15})
可以用来控制子图之间的间距。gridspec_kw=
还允许创建不同大小的子图。can的一个有趣参数plt.subplots
是sharex=True
,使所有子图都具有相同的 x 轴,因此比较具有不同条形长度的图会更容易。
您可以按如下方式使用该构造:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
def faiGraficoBarh(table, titolo, x, y, ax):
table.head(10).plot.barh(ax=ax)
ax.set_title(titolo)
ax.set_xlabel(x)
ax.set_ylabel(y)
def parolePerAutore(dfPulito):
return pd.DataFrame({'words': np.random.uniform(1, 10, 10), 'letters': np.random.uniform(1, 10, 10)},
index=list('ABCDEFGHIJ'))
dfPulito = None # we're just working for dummy data
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 5),
gridspec_kw={'hspace': 0.4, 'wspace': 0.15})
faiGraficoBarh(parolePerAutore(dfPulito), 'message for every person', 'x', 'y', axes[0][0])
faiGraficoBarh(parolePerAutore(dfPulito), 'message for every person', 'x', 'y', axes[0][1])
faiGraficoBarh(parolePerAutore(dfPulito), 'message for every person', 'x', 'y', axes[1][0])
faiGraficoBarh(parolePerAutore(dfPulito), 'message for every person', 'x', 'y', axes[1][1])
plt.show()
推荐阅读
- highcharts - 有没有办法将图例更新为 chart.events 中变量的值?
- active-directory - 将 Active Directory 中的用户集成到 Rancher 中
- bash - 需要将 500 个特定文件从一个共享目录移动到另一个共享目录
- continuous-integration - 如何自动将库从一个项目升级到另一个项目
- java - 用 Java 连接本地网络之外的计算机
- json - 在 React Native 中创建动态图库,但图像不会出现
- javascript - 如何在 google-apps-script Web 应用程序的 for-loop 函数中使用 async/await 和 FileReader?
- javascript - javascript async await 使用 Promise 提交带有 onsubmit 的表单
- symfony - 在 Symfony 4 中填充所有必需参数
- google-app-engine - 允许用户直接发布到 Google Cloud Storage?