我有以下数据框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的值。
我该如何实现?
答案 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()
输出:
答案 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()
您可以执行相同操作,并显示每列一个图:
# 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()