密度图+回归线,相关图这样画?seaborn中 joinplot 结合核密度图和回归图(KDE+regplot)

因为jointplot就是联合绘图,通常边缘上绘制分布图,中间绘制其它的(比如核密度图),所以如何去除边缘的分布图,再叠加一条回归线呢,可以用于替换常规散点图表示相关图的方式,如下图?

密度图+回归线,相关图这样画?seaborn中 joinplot 结合核密度图和回归图(KDE+regplot)_第1张图片

代码汇总

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 图1
tips = pd.read_excel('data.xlsx')
sns.jointplot(x='data1',y='data2',data=tips,kind='kde',
	height=6,color='#2F4F4F')  
plt.savefig('kde1'+'.png',dpi=600)
plt.show()  

# 图2
g = (sns.jointplot("data1",'data2',data=tips,
				kind='kde',height=6,color='#2F4F4F')
        .plot_joint(sns.regplot,scatter=False, color='#945357'))
plt.savefig('kde2'+'.png',dpi=600)
plt.show()

# 图3

sns.kdeplot(tips['data1'],tips['data2'],kind='kde',
color='#2F4F4F',height=6,shade_lowest=False,shade=True,n_levels=8)
sns.regplot(tips['data1'],tips['data2'], scatter=False,
			ci=False,color='#945357')
plt.savefig('kde3'+'.png',dpi=600)
plt.show()

如果有帮到你,给个赞支持一下哦!

代码参数解析

导包

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

数据准备

建议将数据整理在excel中,按照第一行是列名,后面紧跟着数据的方试来整理,因为seaborn中的绘图工具基本都是基于pandas中的DataFrame和Series数据结构。DataFrame的基本单元是Series,Series的数据组织形式是列名+数据。如果从excel中直接读取就可以获得DataFrame形式的数据(excel和DataFrame数据形式见文末)。

数据读入

tips = pd.read_excel('data.xlsx')
# type(tips['data1'])
# Out[5]: pandas.core.series.Series

绘图1

sns.jointplot(x='data1',y='data2',data=tips,kind='kde',
	height=6,color='#2F4F4F')  
# 保存图片
plt.savefig('kde1'+'.png',dpi=600)
plt.show()        
密度图+回归线,相关图这样画?seaborn中 joinplot 结合核密度图和回归图(KDE+regplot)_第2张图片

参数说明

  • data:就是DataFrame数据
  • x:就是DataFrame中的Serises名字
  • y:同x,是另外一列Series数据的名字
  • kind:是绘图的方式’kde’就是密度图,scatter就是散点图,reg是回归图。还有一些其它的({ “scatter” | “reg” | “resid” | “kde” | “hex” })。
  • color:颜色值 ,可以输入这种hex形式的颜色,’#2F4F4F’,下面这个网址可以获取到hex颜色值
    颜色值选取网址
  • height:是图片的大小,height=6,则得到的图片是6*6

绘制图2(密度图+加回归线+分布图)

g = (sns.jointplot("data1", 'data2',data=tips,kind='kde',height=6,color='#2F4F4F')
        .plot_joint(sns.regplot,scatter=False, color='#945357'))
# 保存图片
plt.savefig('kde2'+'.png',dpi=600)
plt.show()
密度图+回归线,相关图这样画?seaborn中 joinplot 结合核密度图和回归图(KDE+regplot)_第3张图片
参数说明
  • 大多数参数和上面一样,主要是引入plot_join() 函数,该函数可以完成在joinplot绘图结果的基础上再叠加一层结果。在本文中主要是在密度图的基础上绘制一条回归线。其余功能暂时不讲。
  • color:是plot_join()绘图使用的函数
  • 注意:scatter=False表示回归图不绘制散点,True表示保留散点。

绘制图三(密度图+回归图)

因为jointplot就是联合绘图,通常边缘上绘制分布图,中间绘制其它的,所以如何去除边缘的分布呢,在joinplot中没有给出直接去掉边上的分布图的方式(其实也有办法,利用space和ratio,暂时先不讲,本文使用优雅的方法)

# 设置背景风格(网格)
sns.set(style="darkgrid")
sns.kdeplot(tips['data1'],tips['data2'],kind='kde',
color='#2F4F4F',height=6,shade_lowest=False,shade=True,n_levels=8)
sns.regplot(tips['data1'],tips['data2'], scatter=False,
			ci=False,color='#945357')
			
# 保存图片
plt.savefig('kde3'+'.png',dpi=600)
plt.show()
密度图+回归线,相关图这样画?seaborn中 joinplot 结合核密度图和回归图(KDE+regplot)_第4张图片

参数说明

  • 使用kdeplot和regplot配合可以绘制图三,又可以不保留分布图
  • 说明一下,kdeplot和regplot绘制数据是基于Series,不是DataFrame,数据输入的方式有点小变化,其余基本相同。
  • 引入几个新的参数(jointplot可用),介绍一下
  • shade:表示密度图有没有过度的颜色,如果设置为false,密度图只有边缘线,没有渐变的颜色
  • shade_lowest:表示密度最低的一层是否显示,其实密度最低的一层通常都是没有数据的,设置为false,就表示不显示,保持背景色
  • n_levels:密度层数,就是密度从最高到最低,一共分为几层

说明

其实图1、图2、图3都是使用的一种颜色,为什么绘制的密度图的渐变不一样?

  • 其实是因为jointplot的colorbar生成方式和kdeplot的生成方式不同,如果想画图3(kde+reg)但是又使用jointplot()的colorbar怎么办呢?就只能使用我提到的比较暴力的解法了,本文就先不跑偏了。

DataFrame数据组织形式

密度图+回归线,相关图这样画?seaborn中 joinplot 结合核密度图和回归图(KDE+regplot)_第5张图片

excel数据组织形式

密度图+回归线,相关图这样画?seaborn中 joinplot 结合核密度图和回归图(KDE+regplot)_第6张图片

欢迎补充,交流学习。

你可能感兴趣的:(python,数据处理及可视化,python,数据分析)