为刻面网格绘制图例

pac*_*k24 4 python seaborn

我在 seaborn 中使用分面网格绘制了大约 10 个图形。如何在每个图中绘制图例?这是我目前的代码:

g = sns.FacetGrid(masterdata,row="departmentid",col = "coursename",hue="resulttype",size=5, aspect=1)
g=g.map(plt.scatter, "totalscore", "semesterPercentage")
Run Code Online (Sandbox Code Playgroud)

如果我包含plt.legend(),则图例仅出现在最后一张图中。如何在分面网格图中的每个图中绘制图例?或者有没有办法在第一个图形本身而不是最后一个图形中绘制图例?预先感谢您的帮助。

aso*_*uin 8

如果您迭代它们,您可以单独为每个轴添加图例。使用 seaborn 文档中的示例:

import seaborn as sns

tips = sns.load_dataset("tips")

g = sns.FacetGrid(tips, col="time",  hue="smoker")
g.map(plt.scatter, "total_bill", "tip", edgecolor="w")

for ax in g.axes.ravel():
    ax.legend()
Run Code Online (Sandbox Code Playgroud)

我们必须使用.ravel()的原因是轴存储在numpy数组中。这让你:

Facetgrid 带有单独的图例

所以在你的情况下,你需要做

g = sns.FacetGrid(masterdata,row="departmentid",col = "coursename",hue="resulttype",size=5, aspect=1)
g.map(plt.scatter, "totalscore", "semesterPercentage")

for ax in g.axes.ravel():
    ax.legend()
Run Code Online (Sandbox Code Playgroud)

只显示在左上图的传说,你要访问的第一个axes中numpy排列,这将是在索引[0, 0]。你可以通过这样做来做到这一点,例如

g = sns.FacetGrid(tips, col="time",  hue="smoker")
g.map(plt.scatter, "total_bill", "tip", edgecolor="w")

g.axes[0, 0].legend()
Run Code Online (Sandbox Code Playgroud)

这会让你: 在第一个轴中带有图例的 Facetgrid