我在 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(),则图例仅出现在最后一张图中。如何在分面网格图中的每个图中绘制图例?或者有没有办法在第一个图形本身而不是最后一个图形中绘制图例?预先感谢您的帮助。
如果您迭代它们,您可以单独为每个轴添加图例。使用 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数组中。这让你:
所以在你的情况下,你需要做
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)