Python 在seaborn中绘制多个箱线图?

Python 在seaborn中绘制多个箱线图?,python,pandas,plot,seaborn,boxplot,Python,Pandas,Plot,Seaborn,Boxplot,我想用seaborn in pandas绘制箱线图,因为这是一种更好的可视化数据的方法,但我对它不太熟悉。我有三个不同度量的数据帧,我想比较不同的度量。我将遍历文件路径以访问它们 for path in paths: df = pd.read_csv(path) 每个指标的dfs都是独立的,看起来像这样(其中…表示填充的数据值)。1、2、3、4、5是列名,表示不同的试验: 1 2 3 4 5 0 .............. 1 .............. 2

我想用seaborn in pandas绘制箱线图,因为这是一种更好的可视化数据的方法,但我对它不太熟悉。我有三个不同度量的数据帧,我想比较不同的度量。我将遍历文件路径以访问它们

for path in paths: 
   df = pd.read_csv(path)
每个指标的dfs都是独立的,看起来像这样(其中…表示填充的数据值)。1、2、3、4、5是列名,表示不同的试验:

    1  2  3  4  5
0   ..............
1   ..............
2   ..............
3   ..............
4   ..............
我想让试验1、2、3、4、5的所有曲线图和3个指标中的每一个并排,其中三个指标的所有第一个试验曲线图都在左边,然后所有第二个试验曲线图都在右边,依此类推

我怎么能在seaborn这样做呢?我知道我可以通过循环路径并使用如下boxplot函数为每个度量单独绘制一个图:

sns.boxplot(data=df)   

但是,我如何才能将其他指标的图并排放在同一个图上?

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

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()


您可能希望将数据帧合并为一个,并使用
boxplot
hue
参数。如果你需要帮助,你应该提供一个问题的答案。请提供一些你作为答案张贴代码的解释。
# libraries
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
from random import randint, gauss

# create a DataFrame
df = pd.DataFrame({
    'Sensations':[randint(1,3) for i in range(300)]
})
df['Temperature'] = df['Sensations'].map(lambda x: gauss(0.8/x,0.1)*40)
df['Sensations'] = df['Sensations'].map({1:'hot',2:'normal',3:'cold'})

# create plot
ax = sns.boxplot(x="Sensations", y="Temperature", data=df)

# show plot
plt.show()