从Pandas数据帧绘制多个条形图

3

所以我有一个类似的数据框:

exp_name, index, items, clicks
"foo",0, "apple",200
"foo",0, "banana", 300
"foo",0,"melon",220
"foo",1, "apple", 10
"foo",1,"peach", 20
"bar",0, "apple",400
"bar",0,'banana', 500
"bar",0, "melon",240
"bar",1,"apple",500

等等其他的内容

我希望为每个实验名称绘制相关的图表,这些图表显示每个索引中每个项目的点击次数条形图,但按索引颜色分组。 基本上... 绘制1..对于实验"foo",绘制一个条形图..其中index == 0..所有索引0的条形图用一种颜色表示..索引1用另一种颜色表示。

如果项目丢失(例如,桃子在“foo”,1中,但不在任何其他地方),请将“peach”替换为其他地方的零。

1个回答

4
我将您的数据复制/粘贴到名为“test.txt”的txt文件中,并将“index”重命名为“status”,以避免与DataFrame索引混淆。然后我使用Seaborn库根据您提到的列联表制作条形图(基于我的理解)。我使用子图而不是使用颜色来区分“status”,因为我个人认为这样看起来更清晰,但由于您的要求,我在下面使用颜色。
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

df = pd.read_csv('test.txt')  
fig, ax = sns.plt.subplots(1, 1, figsize=(7,5))
sns.factorplot(x="items", y="clicks", hue="exp_name", col="status", data=df, kind="bar")
plt.show()

给出以下内容:{{link1:输入图像描述}}
如果你真的想通过颜色区分“索引”(我称之为“状态”),你可以定义一个新变量,将“exp_name”与“status”组合起来。
df['exp'] = df.exp_name + df.status.astype(str)
sns.factorplot(x="items", y="clicks", hue="exp", data=df, kind="bar")

会得到类似这样的结果

enter image description here

如果您有更多问题,请查看seaborn的文档。这是一个非常适用于分类数据的优秀库。更改图例标签和其他设置遵循matplotlib惯例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接