python-3.x - 在 Matplotlib 中 groupby 之后的 Python 并排箱线图
问题描述
需要进行分组并并排打印 2 个箱线图。在下面的示例中,我需要通过按 B 列对 A 列的值进行分组来绘制 A 列的箱线图。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.rand(10,1), columns=['A'])
df['B'] = [1, 2, 1, 1, 1, 2, 1, 2, 2, 1]
for n, grp in df.groupby('B'):
plt.boxplot(x='A',data=grp)
解决方案
您可以在调用中添加一个位置以plt.boxplot()
避免箱线图在同一位置绘制两次:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.rand(10, 1), columns=['A'])
df['B'] = [1, 2, 1, 1, 1, 2, 1, 2, 2, 1]
for n, grp in df.groupby('B'):
plt.boxplot(x='A', data=grp, positions=[n])
plt.xticks([1, 2], ['Label 1', 'Label 2'])
plt.show()
或者你可以使用 seaborn 让分组。您可以替换列中的数字以具有标签。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(np.random.rand(10, 1), columns=['A'])
df['B'] = [1, 2, 1, 1, 1, 2, 1, 2, 2, 1]
df['B'] = df['B'].replace({1: 'Label 1', 2: 'Label 2'})
sns.boxplot(data=df, x='B', y='A' )
plt.show()
推荐阅读
- python - 在Python中逐行修改字符串
- java - 我可以在 scriptlet 和 JSTL 之间传递以转义 XML 吗?
- gams-math - 如何访问 GAMS 子集中的成员?
- vagrant - 我可以在 Vagrant 中安装共享文件夹之前强制进行配置吗?
- reactjs - 将数据添加到 Firebase 中的现有节点
- ios - 自定义 AlertView 控制器未显示视图控制器的顶部?
- uwp - 使用 AdControl.Suspend() 方法并将 AdControl 可见性更改为 Collapsed 是否有任何限制?
- java - 从另一个类中检索值
- angular - 在Angular 2中将Base64字符串转换为pdf
- linux - pypy3 安装密码学失败