【问题标题】:Box Plot of a many Pandas Dataframes许多 Pandas 数据框的箱线图
【发布时间】:2017-02-02 14:10:10
【问题描述】:

我有3个数据框,包含17组数据,A、B、C组。A如下代码sn-p所示

import pandas as pd
import numpy as np
data1 = pd.DataFrame(np.random.rand(17,3), columns=['A','B','C'])
data2 = pd.DataFrame(np.random.rand(17,3)+0.2, columns=['A','B','C'])
data3 = pd.DataFrame(np.random.rand(17,3)+0.4, columns=['A','B','C'])

我想绘制一个箱线图来比较三个组,如下图所示 我正在尝试使用seaborn's box plot 制作情节,如下所示

import seaborn as sns
sns.boxplot(data1, groupby='A','B','C') 

但显然这不起作用。有人可以帮忙吗?

【问题讨论】:

  • 数据被分成三个数据框有什么原因吗?三者之间有什么不同的指标?
  • @Parfait 没有理由将三个数据帧分开。我可以合并数据框,但我会重复列名。三者之间有指标。除此之外,我知道它们是不同的,因为数据来自不同的位置
  • 位置是指标!在sns.boxplot 中,您需要将其用于轴。

标签: python boxplot seaborn


【解决方案1】:

考虑分配一个像 Location 这样的指标来区分您的三组数据。然后连接所有三个并融合数据以检索一个 value 列、一个 Letter 分类列和一个 Location 列,所有输入到@987654323 @:

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

data1 = pd.DataFrame(np.random.rand(17,3), columns=['A','B','C']).assign(Location=1)
data2 = pd.DataFrame(np.random.rand(17,3)+0.2, columns=['A','B','C']).assign(Location=2)
data3 = pd.DataFrame(np.random.rand(17,3)+0.4, columns=['A','B','C']).assign(Location=3)

cdf = pd.concat([data1, data2, data3])    
mdf = pd.melt(cdf, id_vars=['Location'], var_name=['Letter'])
print(mdf.head())

#    Location Letter     value
# 0         1      A  0.223565
# 1         1      A  0.515797
# 2         1      A  0.377588
# 3         1      A  0.687614
# 4         1      A  0.094116

ax = sns.boxplot(x="Location", y="value", hue="Letter", data=mdf)    
plt.show()

【讨论】:

  • 非常感谢!这正是我想要的!
猜你喜欢
  • 2015-12-20
  • 2018-09-08
  • 1970-01-01
  • 2016-02-05
  • 2022-11-17
  • 2016-10-30
  • 2017-03-20
  • 2022-01-03
  • 2014-05-27
相关资源
最近更新 更多