繁体   English   中英

如何将 seaborn 图中的图例移动到轴刻度

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM