【问题标题】:Scatterplot using Seaborn使用 Seaborn 的散点图
【发布时间】:2019-09-26 14:14:20
【问题描述】:

我有以下数据框df:

           A           B                  C               D           E       Gender
0          3.125       3.333333           3.333333        2.500       3.6     male
1          3.875       4.444444           4.555556        2.000       4.3     male
2          3.750       2.555556           4.111111        2.750       3.1     female
3          3.125       4.111111           4.444444        2.000       3.9     female
4          4.000       4.777778           4.777778        1.250       3.6     female
5          2.875       4.333333           4.000000        3.250       3.6     male
6          3.250       3.444444           2.333333        2.875       4.1     male

现在我想使用 Seaborn 绘制以下图:

ax = sns.stripplot(x=" ", y=" ", hue="Gender", data=df, jitter=True, palette="Set2", dodge=True)

不幸的是,我不知道我必须在 x 和 y 中添加什么,因为我的数据框的格式在某种程度上并不真正匹配。我想在 x 轴(A、B、C、D 和 E)上绘制 5 个散点图,在 y 轴上绘制 A、B、C、D 和 E 的值。

我怎样才能做到这一点?

【问题讨论】:

  • 您想要制作 25 个散点图,分别绘制 A vs. A、A vs B.、... E Vs. E 在一个地块上?
  • 或者您只是想制作 A-E 分布的散点图,在同一图上按性别着色?

标签: python pandas dataframe seaborn


【解决方案1】:

您需要选择 x 轴。你可以拿你的专栏之一。但是,所有列似乎都是一些数据,所以我们将定义另一个 x

df["x"] = np.linspace(1, 7, 7)
df
>>>
       A         B         C      D    E  Gender    x
0  3.125  3.333333  3.333333  2.500  3.6    male  1.0
1  3.875  4.444444  4.555556  2.000  4.3    male  2.0
2  3.750  2.555556  4.111111  2.750  3.1  female  3.0
3  3.125  4.111111  4.444444  2.000  3.9  female  4.0
4  4.000  4.777778  4.777778  1.250  3.6    male  5.0
5  2.875  4.333333  4.000000  3.250  3.6    male  6.0
6  3.250  3.444444  2.333333  2.875  4.1    male  7.0

现在您可以使用循环显示每列一个散点图

# style
plt.style.use('seaborn-darkgrid')

# create a color palette
palette = plt.get_cmap('Set1')

# Title
plt.title("A - B - C - D - E - Gender `plot`")
# multiple line plot
for i, column in enumerate(df.drop('x', axis=1)):
    plt.plot(df['x'], df[column], marker='', color=palette(i), linewidth=1, alpha=0.9, label=column)

plt.xlabel("x")

plt.show()

您也可以这样做并显示每列一个图

# style
plt.style.use('seaborn-darkgrid')

# create a color palette
palette = plt.get_cmap('Set1')

# Title
plt.title("A - B - C - D - E `Spaghetti plot`", loc='left',
          fontsize=12, fontweight=0, color='orange')
# For each column
for i, column in enumerate(df.drop('x', axis=1)):
    plt.subplot(6,1,i+1)
    plt.plot(df['x'], df[column], marker='', color=palette(i), linewidth=1, alpha=0.9, label=column)

# Add legend
plt.legend(loc=2, ncol=2)

plt.xlabel("x")
plt.ylabel("y")

plt.show()

【讨论】:

    【解决方案2】:

    试试:

    new_df = df.set_index('Gender').stack().reset_index()
    
    sns.stripplot(x=new_df.level_1, y=new_df[0], hue=new_df.Gender)
    plt.show()
    

    输出:

    【讨论】:

      猜你喜欢
      • 2020-12-04
      • 2020-11-07
      • 2017-05-09
      • 2021-01-22
      • 2019-09-26
      • 2015-05-28
      • 2019-04-15
      • 1970-01-01
      • 2019-05-28
      相关资源
      最近更新 更多