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

Seaborn jointplot修改标记形状及添加类别标签的实现咨询

Seaborn jointplot修改标记形状及添加类别标签的实现咨询

嗨,我来帮你搞定这两个需求!针对你用Seaborn绘制jointplot时想要修改标记形状、给每个分布上方添加类别标签的问题,我结合Iris数据集整理了具体的实现方案,咱们一步一步来:

一、修改不同类别的标记形状

你当前的代码用了hue区分类别,要给每个类别设置不同的标记形状,只需要在jointplot里加上style参数绑定类别,再通过joint_kws传递markers参数定义具体的标记样式就行。比如咱们给三个鸢尾花类别分别设置圆形、方形、三角形标记:

import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 加载Iris数据集并调整列名(和你的代码对齐)
iris = sns.load_dataset("iris")
iris.columns = ["sepal length", "sepal width", "petal length", "petal width", "class"]

# 绘制jointplot,指定标记形状
g = sns.jointplot(
    data=iris,
    x="sepal length",
    y="sepal width",
    hue="class",
    style="class",  # 按类别区分标记样式
    joint_kws={"markers": ["o", "s", "^"]}  # 对应三个类别的标记形状
)

这样就能让每个类别的散点用不同形状的标记显示,和你想要的示例图效果一致。

二、给每个分布上方添加类别标签

接下来要在边际的分布(上方和右侧的直方图)上方添加类别标签,咱们需要获取jointplot的轴对象,然后在对应位置添加文本标签:

# 获取类别名称和对应的配色
classes = iris["class"].unique()
palette = sns.color_palette(n_colors=len(classes))

# 给上方的边际x分布添加类别标签
for cls, color in zip(classes, palette):
    # 筛选当前类别的数据
    cls_data = iris[iris["class"] == cls]
    # 计算该类别x轴数据分布的峰值位置
    x_hist, x_bins = np.histogram(cls_data["sepal length"], bins=10)
    peak_x_pos = x_bins[np.argmax(x_hist)]
    # 在峰值位置上方添加类别标签
    g.ax_marg_x.text(
        peak_x_pos,
        g.ax_marg_x.get_ylim()[1] * 1.05,
        cls,
        color=color,
        ha="center",
        fontweight="bold"
    )

# 给右侧的边际y分布添加类别标签
for cls, color in zip(classes, palette):
    cls_data = iris[iris["class"] == cls]
    # 计算该类别y轴数据分布的峰值位置
    y_hist, y_bins = np.histogram(cls_data["sepal width"], bins=10)
    peak_y_pos = y_bins[np.argmax(y_hist)]
    # 在峰值位置右侧添加旋转90度的类别标签
    g.ax_marg_y.text(
        g.ax_marg_y.get_xlim()[1] * 1.05,
        peak_y_pos,
        cls,
        color=color,
        va="center",
        rotation=90,
        fontweight="bold"
    )

# 调整布局,避免标签被画布截断
plt.tight_layout()
plt.show()

把两段代码合在一起运行,就能得到和目标图一致的效果啦——不同类别用不同标记,每个分布上方都有对应的类别标签。

备注:内容来源于stack exchange,提问作者Mik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 18:03:10