我正在尝试在FacetGrid Seaborn
对象的每个构面中创建特定于构面的图例,例如catplot
所产生的图例。
考虑下面的DataFrame
,其中measurement
是要根据变量Condition
和(instrument){{1}跨行和列面向分类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
的图例会变得很长。受另一个post答案的启发,我选择使用FacetGrid
遍历FacetGrid
axes
以获得每个方面的图例:
g.axes.ravel()
这导致整个整个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
级别。
我该怎么办?
答案 0 :(得分:2)
考虑使用connection.query(query, [12, 'last_name', 'DESC'], function (executionError, result) {
if (executionError) {
reject(executionError);
} else {
resolve(result);
}
});
与groupby()
对象进行元素迭代,以通过 hue 列的相应值重建每个图例。重要的是,在绘制之前必须对数据框进行排序。
zip