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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:05:28