假设我有以下数据框
df = pd.DataFrame(
[
['x', 42, 50 68 12,
['y', 51, 60 79 22,
['z', 43, 50 58 12,
['w', 46, 70 88 22,
['xy',38, 40 69 22,
['xz',39, 40 49 12
], columns=['system', 'b', 'c', 'd', 'e'])
我想根据列名创建一个多分组的箱线图(我想创建 b、c、d、e 和列的箱线图)。有没有办法完成这个任务?我找不到有关此的任何信息
例如,我查看了 seaborn 网站,它根据列值 here (hue="smoker"
)
答案 0 :(得分:0)
您需要先melt
您的数据框才能将其数据结构更改为适用于 seaborn 的结构:
注意:下面的代码不会返回示例数据上的框。但是,它应该适用于实际数据。使用提供的示例数据,如果您传递 hue
参数,您将不会得到一个框,因为 system
列中值的最大大小为 1。您不能有一个带有只有一个值,这将违背箱线图的目的。相反,您可能需要一个条形图或折线图。 换句话说,您只有一行表示 x、y、z、w、xy、xz 等。在您的实际数据中,假设您有 600 行系统中每个值有 100 行,那么你会得到一个带有以下代码的分组框。
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.DataFrame([
['x', 42, 50, 68, 12],
['y', 51, 60, 79, 22],
['z', 43, 50, 58, 12],
['w', 46, 70, 88, 22],
['xy',38, 40, 69, 22],
['xz',39, 40, 49, 12]], columns=['system', 'b', 'c', 'd', 'e'])
df = df.melt(id_vars='system')
sns.boxplot(x="system", y="value", hue="variable", data=df)