【问题标题】:Hierarchial plotting of pandas dataframe showing boxplot visualization显示箱线图可视化的熊猫数据框的分层绘图
【发布时间】:2019-02-13 12:12:43
【问题描述】:

我有一个如下所示的多元数据集:

我的目标是生成一个箱线图,以可视化 Treat1、Treat2、Treat3 和 Treat4 中值的分布。

我可以得到一个条形图来得到我想要的基于 How to add group labels for bar charts in matplotlib?

但是,我的要求是使用箱线图查看每个处理组的均值和异常值之间的分布。 我再次粘贴代码,该代码生成基于stackoverflow代码https://stackoverflow.com/users/2846871/varicus的条形图@

df = df2.groupby(['Group','Category','Day ']).sum()
fig = plt.figure(figsize=(20,8))
ax = fig.add_subplot(111)
df.plot(kind='bar',stacked=False,ax=fig.gca())
labels = ['' for item in ax.get_xticklabels()]
ax.set_xticklabels(labels)
ax.set_xlabel('')
label_group_bar_table(ax, df)
fig.subplots_adjust(bottom=.1*df.index.nlevels)
plt.show()

生成箱线图而不是每个条形图的最佳方法是什么。

【问题讨论】:

标签: matplotlib seaborn boxplot


【解决方案1】:

可能这就是您正在寻找的。

# I create a dataframe similar to yours for others to give other solutions.

group = [1,1,1,1,2,2,4,4, 2, 2, 3, 2, 2, 4, 4, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1,1]
cateogry = [0,0,1,1,0,0,0,0,1,1,1,1,2,2,2,2,3,3,0,0,1,1,0,0,2,2,2]
Treat1 = np.random.randint(0, 100, size= len(group))
Treat2 = np.random.randint(0, 100, size= len(group))
Treat3 = np.random.randint(0, 100, size= len(group))
Treat4 = np.random.randint(0, 100, size= len(group))
df = pd.DataFrame.from_dict({'Group': group, "Category": cateogry, "Treat1": Treat1,"Treat2": Treat2,"Treat3": Treat3,"Treat4": Treat4, })

f = df.boxplot(by = ['Group','Category'],figsize = (12,8))

将导致

【讨论】:

  • 这张图没有考虑A列,它是'day并排的。这样我就可以比较第 0 天和第 20 天的组值的情况
【解决方案2】:

我添加了完成这项工作的部分代码,但我希望每个类别都有自己的面部颜色。我似乎无法通过图表区分类别。

fig, ax = plt.subplots(figsize = (20,8))


#Note showfliers=False is more readable, but requires a recent version iirc
bp = df_Dummy.boxplot(by = ['Group','Category','Day '],ax=ax, 
sym='',rot=90,return_type='dict',patch_artist=False)


[[item.set_linewidth(2) for item in bp[key]['boxes']] for key in bp.keys()]


[[item.set_linewidth(2) for item in bp[key]['fliers']] for key in bp.keys()]
[[item.set_linewidth(2) for item in bp[key]['medians']] for key in bp.keys()]
[[item.set_linewidth(2) for item in bp[key]['means']] for key in bp.keys()]
[[item.set_linewidth(2) for item in bp[key]['whiskers']] for key in bp.keys()]
[[item.set_linewidth(2) for item in bp[key]['caps']] for key in bp.keys()]
colors = ['pink', 'lightblue', 'lightgreen','yellow']
[[item.set_color in zip(colors) for item in bp[key]['boxes']] for key in bp.keys()]
# seems to have no effect
[[item.set_color('b') for item in bp[key]['fliers']] for key in bp.keys()]
[[item.set_color('m') for item in bp[key]['medians']] for key in bp.keys()]
[[item.set_markerfacecolor('k') for item in bp[key]['means']] for key in bp.keys()]
[[item.set_color('c') for item in bp[key]['whiskers']] for key in bp.keys()]
[[item.set_color('y') for item in bp[key]['caps']] for key in bp.keys()]

ax.margins(y=0.05)

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2017-12-16
    • 2017-03-20
    • 2014-11-05
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 2018-03-19
    相关资源
    最近更新 更多