使用Seaborn的散点图

时间:2019-05-08 19:16:36

标签: python pandas dataframe seaborn

我有以下数据框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的值。

我该如何实现?

2 个答案:

答案 0 :(得分:1)

尝试:

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

输出:

enter image description here

答案 1 :(得分:0)

您需要选择 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()

enter image description here

您可以执行相同操作,并显示每列一个图

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

enter image description here