【发布时间】:2020-04-29 13:59:53
【问题描述】:
我正在尝试在FacetGrid Seaborn 对象的每个方面制作一个特定于方面的图例,例如由catplot 生成的图例。
考虑以下DataFrame,其中measurement 是要针对分类Condition 绘制的变量,根据变量Lab 和(仪器)model 跨行和列分面。 hue 设置为进行测量的特定仪器的序列号。
这是DataFrame:
df = pd.DataFrame({'Condition': ['C1','C2','C1','C2','C1','C1','C2','C1',
'C1','C1', 'C1', 'C2', 'C1', 'C2', 'C1', 'C2', 'C2'],
'model': ['Pluto','Pluto','Jupy','Jupy','Jupy','Jupy','Jupy','Jupy',
'Jupy', 'Pluto', 'Pluto', 'Pluto', 'Pluto', 'Pluto', 'Jupy', 'Jupy',
'Pluto'],
'serial': [2520,2520,3568,3568,3568,3580,3580,356,
456, 2580, 2580, 2580, 2599, 2599, 2700, 2700,
2560],
'measurement': [1.02766,1.0287,1.0099,1.0198,1.0034,1.0036,1.0054,1.0024,
1.0035,1.00245,1.00456, 1.01, 1.0023, 1.0024, 1.00238, 1.0115,
1.020],
'Lab': ['John','John','John','John','Jack','Jack','Jack','John',
'Jack','John', 'Jack', 'Jack', 'Jack', 'Jack', 'John', 'John',
'John']}
)
某些方面仅包含hue 级别的子集,并且随着级别数量的增加,FacetGrid 图例变得相当长。受到另一个post 的答案的启发,我选择使用g.axes.ravel() 遍历FacetGrid axes 以获得每个方面的图例:
sns.set_style("ticks")
g = sns.catplot(x='Condition', # returns a FacetGrid object for further editing
y = 'measurement',
data=df,
hue='serial',
row='Lab',
col='model',
s=10,
kind='swarm',
dodge=False,
aspect = 1,
sharey = True,
legend_out = True,
).despine(left=True)
for axes in g.axes.ravel():
axes.legend()
g.savefig('/Users/massimopinto/Desktop/legend_in_facets.png',
bbox_inches='tight')
这会导致整个FacetGrid 对象图例中的情节相当拥挤和信息过多。我希望拥有的是每个方面的图例仅以显示出现在该特定方面的hue 级别。
我该怎么做?
版本:熊猫:1.0.3;海生:0.10.0;蟒蛇:3.7.2
【问题讨论】: