Seaborn JointPlot如何根据指定特征列调整散点大小?
错误原因
- 第一次报错是因为
Axes.plot()是线图绘制方法,返回的Line2D对象无s参数,s是散点图scatter()方法的专属参数 - 第二次错位是因为你额外新建了独立画布轴对象,散点图没有绑定到jointplot的主轴
g.ax_joint上,导致位置偏移
可行实现代码
直接将散点绘制到jointplot的主轴上即可,同时可以保留原有的边际直方图和线性拟合效果:
import seaborn as sns import numpy as np import matplotlib.pyplot as plt sns.set(style="darkgrid") tips = sns.load_dataset("tips") # 生成基础jointplot,保留边际分布 g = sns.jointplot("total_bill", "tip", data=tips, kind="reg", xlim=(0, 60), ylim=(0, 12), color='k', height=7) # 清空原有的默认散点 g.ax_joint.cla() # 绘制大小随size列变化的散点,同时可以设置hue区分分组,sizes控制大小区间 sns.scatterplot( data=tips, x="total_bill", y="tip", size="size", hue="size", sizes=(20, 200), ax=g.ax_joint, # 关键:指定绘制到jointplot的主轴 legend="full" ) # 重新绘制线性拟合线,和原reg效果保持一致 slope, intercept = np.polyfit(tips['total_bill'], tips['tip'], 1) x_reg = np.linspace(0, 60, 100) y_reg = slope * x_reg + intercept g.ax_joint.plot(x_reg, y_reg, color='k', linewidth=2) plt.show()
如果不需要hue效果只需要大小变化,也可以直接用matplotlib的scatter方法替换上方sns.scatterplot部分:
g.ax_joint.scatter(tips['total_bill'], tips['tip'], s=tips['size']*15, # 乘以15调整大小缩放比例 color='blue')
内容的提问来源于stack exchange,提问作者H42
相关产品推荐
相关产品推荐

