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

Seaborn单图双变量散点对比(含回归线)实现求助

Seaborn单图双变量散点对比(含回归线)实现求助

嗨,我完全懂你的困扰!你现在用两次sns.lmplot()得到了两张分开的图,根本没法直观对比两个y变量的差异对吧?这是因为lmplot()本身是Seaborn基于FacetGrid的高级绘图函数,每次调用它都会自动创建一个全新的绘图对象,所以才会生成两张独立的图表。

给你两种简单的解决方案,都能实现把两个变量的散点+回归线放在同一个图里的需求:

方法一:用sns.regplot()在同一轴上叠加绘图

regplot()是Seaborn的低级绘图函数,它支持指定在已有的坐标轴对象上绘图,完美解决叠加的问题:

import seaborn as sns
import matplotlib.pyplot as plt

# 创建一个指定尺寸的画布和坐标轴对象
fig, ax = plt.subplots(figsize=(10, 10))

# 绘制第一个y变量的散点与回归线,自定义颜色和标签
sns.regplot(
    x="common_ln_code",
    y="dif_jac_erl_ev11",
    data=ethnologue_common,
    ax=ax,
    color="#1f77b4",  # 蓝色,可替换成你喜欢的颜色
    label="Large River"
)

# 绘制第二个y变量的散点与回归线,用不同颜色区分
sns.regplot(
    x="common_ln_code",
    y="dif_jac_erm_ev22",
    data=ethnologue_common,
    ax=ax,
    color="#ff7f0e",  # 橙色,可替换成你喜欢的颜色
    label="Medium River"
)

# 设置坐标轴标签和标题
ax.set_xlabel("language code")
ax.set_ylabel("Differenz Jaccardindex")
ax.set_title("Large vs. Medium_river")

# 添加图例,区分两个变量
ax.legend()

# 展示图形
plt.show()

方法二:将数据转成长格式后用lmplot()的hue参数

如果你更习惯用lmplot(),可以先把宽格式的数据转成长格式(用pandas的melt()方法),然后通过hue参数区分不同的y变量:

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

# 将宽格式数据转换为长格式,合并两个y列
melted_data = ethnologue_common.melt(
    id_vars="common_ln_code",  # 保留的参考列
    value_vars=["dif_jac_erl_ev11", "dif_jac_erm_ev22"],  # 需要合并的y列
    var_name="River Category",  # 新的类别列名称
    value_name="Differenz Jaccardindex"  # 新的数值列名称
)

# 用lmplot绘制,通过hue区分不同的y变量
sns.lmplot(
    x="common_ln_code",
    y="Differenz Jaccardindex",
    data=melted_data,
    hue="River Category",  # 按类别区分颜色
    height=10,
    palette=["#1f77b4", "#ff7f0e"]  # 自定义颜色
)

# 设置标题和坐标轴标签
plt.xlabel("language code")
plt.title("Large vs. Medium_river")

plt.show()

两种方法都能实现你的需求,你可以根据自己的使用习惯选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:24:10