如何用Seaborn创建按品牌和产品区分标记的散点图
如何用Seaborn实现按品牌区分颜色、按产品区分标记样式的散点图
问题描述
我有一个包含age、income、brand、product等字段的数据集,想要绘制以age为X轴、income为Y轴的散点图,同时通过两个变量区分数据点:
- 用
brand区分颜色(不同品牌对应不同颜色) - 用
product区分标记样式(比如产品1用X,产品2用O,产品3用-)
目前我已经用Seaborn的lmplot实现了按品牌区分颜色的散点图,但所有标记都是圆形。请问怎么修改才能实现按产品区分标记样式,比如品牌A的产品1显示为红色X,品牌B的产品3显示为绿色-?
现有代码:
import pandas as pd import seaborn as sns df = pd.read_csv("data.csv") sns.lmplot(x='age', y='income', height = 8, aspect = 1, data=df, fit_reg=False, hue='brand', legend = True)
解决方案
你可以直接在lmplot中添加style='product'参数来按产品区分标记样式,同时通过markers参数自定义每个产品对应的标记符号,具体实现有两种方式:
方法1:直接指定标记列表
如果你的product类别是固定的(比如明确有产品1、产品2、产品3),可以直接传递标记列表给markers参数,注意列表顺序要和product的类别顺序一致:
import pandas as pd import seaborn as sns df = pd.read_csv("data.csv") # 定义每个产品对应的标记 product_markers = ['x', 'o', '-'] # 示例:产品1用x,产品2用o,产品3用- sns.lmplot( x='age', y='income', height=8, aspect=1, data=df, fit_reg=False, hue='brand', # 按brand区分颜色 style='product', # 按product区分标记样式 markers=product_markers, # 指定每个product对应的标记 legend=True )
方法2:使用标记映射字典
如果product的类别名称不固定,或者你想明确指定每个产品对应的标记,可以用字典建立映射关系:
import pandas as pd import seaborn as sns df = pd.read_csv("data.csv") # 建立产品到标记的映射字典 product_marker_map = { "产品1": "x", "产品2": "o", "产品3": "-" } sns.lmplot( x='age', y='income', height=8, aspect=1, data=df, fit_reg=False, hue='brand', style='product', markers=product_marker_map, # 传递映射字典 legend=True )
关键参数说明
hue='brand':保持按品牌区分颜色的逻辑,Seaborn会自动为不同品牌分配不同颜色,也可以通过palette参数自定义品牌颜色style='product':让Seaborn按product字段分组,为不同产品应用不同的标记样式markers:指定每个产品对应的标记符号,支持Matplotlib的所有标记样式(比如'x'、'o'、'^'、'-'、's'等)
内容的提问来源于stack exchange,提问作者InnovatingWaters
相关产品推荐
相关产品推荐

