二维密度图可以表示两个数值变量组合的分布,通过颜色渐变(或等高线高低)表示区域内观测值的数量。既可以识别数据集中趋势,也可以分析两个变量之间是否存在某种关系等,
基于seaborn
import seaborn as sns
import matplotlib.pyplot as plt
# 导入数据
df = sns.load_dataset('iris')
# 利用kdeplot函数快速绘制
sns.kdeplot(x=df.sepal_width, y=df.sepal_length)
plt.show()
基于matplotlib
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import gaussian_kde
# 导入数据
df = sns.load_dataset('iris')
x = df.sepal_width
y = df.sepal_length
# gaussian kde
nbins=300
k = gaussian_kde([x,y])
xi, yi = np.mgrid[x.min():x.max():nbins*1j, y.min():y.max():nbins*1j]
zi = k(np.vstack([xi.flatten(), yi.flatten()]))
# 绘制密度图
plt.pcolormesh(xi, yi, zi.reshape(xi.shape), shading='auto')
plt.show()
自定义二维密度图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。
seaborn主要利用kdeplot
绘制二维密度图,可以通过seaborn.kdeplot[1]了解更多用法
import seaborn as sns
import matplotlib.pyplot as plt
# 导入数据
df = sns.load_dataset('iris')
# 自定义颜色、阴影、带宽、透明度
sns.kdeplot(x=df.sepal_width, y=df.sepal_length, cmap="Reds", fill=True, bw_adjust=.5, thresh=0.1)
plt.show()
以上通过seaborn的kdeplot
和matplotlib的pcolormesh
(在自定义密度函数gaussian_kde
基础上)快速绘制二维密度图,并通过修改参数或者辅以其他绘图知识自定义各种各样的二维密度图来适应相关使用场景。
共勉~
[1]
seaborn.kdeplot: https://seaborn.pydata.org/generated/seaborn.kdeplot.html