原理考察:FacetGrid 是一个管理多个子图(Axes)的对象。当使用 g.map() 时,Seaborn 会在每个子图上重复调用绘图函数。然而,直接使用 plt.title() 操作的是当前激活的 axes(通常是最后一个被操作的 axes),而不是整个 Grid 对象。
代码分析:
g.map(plt.hist, "total_bill") 成功在每个分面上绘制直方图(FacetGrid 支持映射 matplotlib 函数)。
plt.title(...) 是 pyplot 的全局命令。在 g.map 执行完后,当前激活的 axes 往往是 Grid 中的最后一个子图。因此,标题只会加在那一个子图上,或者如果布局未调整,看起来位置不对。
正确做法:应该使用 g.fig.suptitle("...") 来为整个 Figure 添加总标题,或者使用 g.set_titles() 来为每个子图设置单独的标题。
错误选项分析:
A/D 错:plt.title() 不具备感知 FacetGrid 整体结构的能力,无法自动居中于整个网格。
C 错:FacetGrid.map() 的核心功能之一就是允许用户传入任何接受数据并能在 axes 上绘图的 matplotlib 函数(如 plt.hist, plt.scatter 等),不仅限于 seaborn 函数。