在seaborn中绘制多个箱形图?

Jan*_*lly 9 python plot boxplot pandas seaborn

我想在熊猫中使用seaborn绘制箱形图,因为它是一种更好的可视化数据的方法,但我对它并不太熟悉.我有三个不同指标的数据框,我想比较不同的指标.我将遍历文件路径来访问它们.

for path in paths: 
   df = pd.read_csv(path)
Run Code Online (Sandbox Code Playgroud)

每个度量标准的dfs是分开的,看起来像这样(其中....表示填充数据值).1,2,3,4,5是列名,表示不同的试验:

    1  2  3  4  5
0   ..............
1   ..............
2   ..............
3   ..............
4   ..............
Run Code Online (Sandbox Code Playgroud)

我希望得到所有试验1,2,3,4,5以及3个指标中的每一个的图,其中三个指标的所有第一个试验图都在左边,然后是所有第二个试验图将是对的权利,依此类推.

我怎么能在海边做这个呢?我知道我可以通过循环遍历路径并使用像这样的boxplot函数为每个度量单独创建一个绘图:

sns.boxplot(data=df)   
Run Code Online (Sandbox Code Playgroud)

但是,我如何能够在同一个情节中并排放置其他指标的图表?

Par*_*ait 16

考虑首先为每个对应的数据帧分配一个像Trial这样的分组列,然后在使用seaborn绘制之前为pd.concat数据帧,最后pd.melt为指标/值长整数据帧分配数据.下面用随机数据演示:

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns

np.random.seed(44)
# DATAFRAMES WITH TRIAL COLUMN ASSIGNED
df1 = pd.DataFrame(np.random.randn(5,5), columns=list(range(1,6))).assign(Trial=1)
df2 = pd.DataFrame(np.random.randn(5,5), columns=list(range(1,6))).assign(Trial=2)
df3 = pd.DataFrame(np.random.randn(5,5), columns=list(range(1,6))).assign(Trial=3)

cdf = pd.concat([df1, df2, df3])                                # CONCATENATE
mdf = pd.melt(cdf, id_vars=['Trial'], var_name=['Number'])      # MELT

print(mdf.head())
#    Trial Number     value
# 0      1      1 -0.750615
# 1      1      1 -1.715070
# 2      1      1 -0.963404
# 3      1      1  0.360856
# 4      1      1 -1.190504

ax = sns.boxplot(x="Trial", y="value", hue="Number", data=mdf)  # RUN PLOT   
plt.show()

plt.clf()
plt.close()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 你是一个美丽的人(假设你不是机器人) (2认同)