[英]how to move the legends in seaborn plots to the axis ticks
我有一个 pandas df
,如下所示,我在 seaborn 中有以下代码到 plot:
Group IP IB FP CP CS PB
0 1 100 20 50 120 40 90
1 1 100 20 50 120 40 80
2 1 100 20 50 120 40 78
3 1 100 20 50 120 40 70
4 1 100 20 50 120 40 62
... ... ... ... ... ... ... ...
95 18 150 40 50 150 60 50
96 19 200 20 70 150 40 72
97 19 200 20 70 150 40 64
98 19 200 20 70 150 40 74
99 19 200 20 70 150 40 76
df_m = pd.melt(df, id_vars='Group', value_vars=['PB'])
fig, ax = plt.subplots(figsize=(15,10))
sns.stripplot(x='variable', y='value', data=df_m, hue='Group', dodge=True, ax=ax, linewidth=1)
sns.boxplot(x='variable', y='value', data=df_m, hue='Group')
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles[:19], labels[:19], title='Group')
我想要的是让图例(第 1-19 组)作为 x 轴的刻度。 我试过这个,但图表变得挤压:
ax.set_xticks(range(19))
ax.set_xticklabels(['G1', 'G2', 'G3', 'G4', 'G5', 'G6', 'G7', 'G8', 'G9', 'G10',
'G11', 'G12', 'G13', 'G14', 'G15', 'G16', 'G17', 'G18', 'G19']);
当您使用df_m.variable
作为 x 轴并且所有值都是 PB 时,x 轴只有一个条目。 因此,添加 19 个刻度和标签会导致所有箱线图在第一个条目周围被压缩。 所以,检查下面的代码,它使用x=Group
并导致 19 个图的 19 个点/刻度,而不是依赖于色调。 由于您有 19 个刻度,因此您可以轻松更改刻度标签。 虽然没有提到,但我已经将图例从 1,2,3... 更新为 G1,G2,G3... 如果不需要,您可以删除那段代码。 请注意,我的大部分数据都是基于您提供的内容和一些随机数,因此您的 plot 可能由于数据点不同而看起来略有不同。 希望这是您正在寻找的...
df_m = pd.melt(df, id_vars='Group', value_vars=['PB'])
fig, ax = plt.subplots(figsize=(15,10))
sns.boxplot(x='Group', y='value', data=df_m, hue='Group', dodge=False, ax=ax)
sns.stripplot(x='Group', y='value', data=df_m, linewidth=1)
myLabels = ['G1', 'G2', 'G3', 'G4', 'G5', 'G6', 'G7', 'G8', 'G9', 'G10',
'G11', 'G12', 'G13', 'G14', 'G15', 'G16', 'G17', 'G18', 'G19']
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles[:19], myLabels, title='Group')
ax.set_xticks(range(19))
ax.set_xticklabels(myLabels)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.