FacetGrid Seaborn的每个方面中特定于方面的图例

时间:2020-04-29 13:59:53

标签: python pandas seaborn

我正在尝试在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级别。 我该怎么办?

towards a facet-specific legend

版本:大熊猫:1.0.3; Seaborn:0.10.0; python:3.7.2

1 个答案:

答案 0 :(得分:2)

考虑使用connection.query(query, [12, 'last_name', 'DESC'], function (executionError, result) { if (executionError) { reject(executionError); } else { resolve(result); } }); groupby()对象进行元素迭代,以通过 hue 列的相应值重建每个图例。重要的是,在绘制之前必须对数据框进行排序。

zip

Angular Material document