You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Seaborn FacetGrid散点图中调整点的尺寸?

问题原因

用FacetGrid.map()调用sns.scatterplot时,s="size"会被当作字符串字面量,而不是自动关联数据中的size列——map方法的关键字参数不会从分面后的子数据集中提取对应列数据,导致传入的s不符合要求,触发报错。

解决办法

方法1:用lambda函数手动传递列数据

通过lambda把size列作为参数传入,让每个分面都能拿到对应子集的size数据:

import seaborn as sns
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="time", row="sex")
g.map(lambda x, y, s, **kwargs: sns.scatterplot(x=x, y=y, s=s*20, **kwargs), "total_bill", "tip", "size")

这里s*20是为了放大点的尺寸(原size是1-6的小整数,直接用的话点太小),可以根据需求调整倍数。

方法2:用map_dataframe方法(推荐)

map_dataframe专门适配数据框列名传参,会自动把分面后的子数据框传给绘图函数,直接用列名字符串即可:

import seaborn as sns
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="time", row="sex")
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip", size="size", sizes=(20, 200))

sizes=(20, 200)用来控制点的最小/最大尺寸,也可以省略用默认值。

方法3:用relplot简化代码(最便捷)

relplot是Seaborn封装好的关系图分面接口,底层基于FacetGrid,代码更简洁:

import seaborn as sns
tips = sns.load_dataset("tips")
sns.relplot(data=tips, x="total_bill", y="tip", size="size", col="time", row="sex", kind="scatter")

内容的提问来源于stack exchange,提问作者David Kaufman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:15:57