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
相关产品推荐
相关产品推荐

