熊猫数据框的seaborn图

Posted

技术标签:

【中文标题】熊猫数据框的seaborn图【英文标题】:seaborn plot for a pandas dataframe 【发布时间】:2022-01-15 22:59:09 【问题描述】:

我有一个用于存储用户种族(类型为 a、b、c、d)及其物理、数学和英语分数的高中考试成绩的 pandas 数据框。我想使用 seaborn 图创建一个单独的图,该图将显示一个人的种族如何对应于平均数学、化学和物理分数?我将下面的图片附加到示例数据框,但它只是没有比赛列,而是假装它有一个比赛列,其类型为 (A,B,C,D)。

考虑过在 x 轴上使用带有种族类别的条形图,但是我如何以相同的方式为每个平均科目分数设置不同的条形图,就像在下面的示例中使用“色调”来表示性别一样,请在此处输入图像描述

需要知道是否还有其他更合适的图表可供我使用?以及我将如何实现它

【问题讨论】:

您能提供所需输出的图像吗?也许您打算包含来自 seaborn.barplot documentation 的图像?我已经用我假设你想要的输出编辑了这个问题 @DerekO - 我不确定您的大量编辑是否有必要。 OP 有责任提供说明。您的解释可能完全不正确,并且还在 OP 的嘴里说出了不存在的话。请不要这样做。如果有的话,您可以在评论中提出建议,但将其编辑到问题中是不合适的。我已经回滚到您进行大量修改之前。 @BigBen 好吧,这很公平。以后我会避免对编辑过于繁重 【参考方案1】:

您需要首先将melt 和Chemistry, Physics, Math 列分成两列:一个标识符列和具有相应值的另一列。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

## recreate your DataFrame
df = pd.DataFrame(
    'Name':list("QWERTYUI"),
    'Student ID': list(range(12001,12009)),
    'Race':list('ABCDABCD'),
    'Chemistry': [59,54,42,66,60,78,64,82],
    'Physics': [90,42,88,48,80,73,43,69],
    'Math': [45,85,54,64,72,64,67,70]
)

df_melted = pd.melt(df, id_vars=['Name','Student ID','Race'], value_vars=['Chemistry','Physics','Math'])

在这里您可以看到两个 DataFrame 的结构差异:

>>> df
  Name  Student ID Race  Chemistry  Physics  Math
0    Q       12001    A         59       90    45
1    W       12002    B         54       42    85
2    E       12003    C         42       88    54
3    R       12004    D         66       48    64
4    T       12005    A         60       80    72
5    Y       12006    B         78       73    64
6    U       12007    C         64       43    67
7    I       12008    D         82       69    70

>>> df_melted
   Name  Student ID Race   variable  value
0     Q       12001    A  Chemistry     59
1     W       12002    B  Chemistry     54
2     E       12003    C  Chemistry     42
3     R       12004    D  Chemistry     66
4     T       12005    A  Chemistry     60
5     Y       12006    B  Chemistry     78
6     U       12007    C  Chemistry     64
7     I       12008    D  Chemistry     82
8     Q       12001    A    Physics     90
9     W       12002    B    Physics     42
10    E       12003    C    Physics     88
11    R       12004    D    Physics     48
12    T       12005    A    Physics     80
13    Y       12006    B    Physics     73
14    U       12007    C    Physics     43
15    I       12008    D    Physics     69
16    Q       12001    A       Math     45
17    W       12002    B       Math     85
18    E       12003    C       Math     54
19    R       12004    D       Math     64
20    T       12005    A       Math     72
21    Y       12006    B       Math     64
22    U       12007    C       Math     67
23    I       12008    D       Math     70

然后您可以使用以下参数调用sns.barplot

ax = sns.barplot(x="Race", y="value", hue="variable", data=df_melted)
plt.show()

【讨论】:

以上是关于熊猫数据框的seaborn图的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Seaborn 并排绘制熊猫数据框的多组列

如何获得数据框的简单散点图(最好使用 seaborn)

seaborn 多变量组条形图

同一图上 Pandas 数据框多列的箱线图(seaborn)

具有连续色调的 Seaborn 配对图?

Seaborn 时间序列图