基于matplotlib
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import gaussian_kde
df = sns.load_dataset('iris')
density = gaussian_kde(df['sepal_width'])
density.covariance_factor = lambda : .25
density._compute_covariance()
xs = np.linspace(1.5, 5, 200)
plt.figure(figsize=(8, 6))
plt.plot(xs,density(xs))
plt.show()
自定义密度图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。
seaborn主要利用kdeplot
绘制密度图,可以通过seaborn.kdeplot了解更多用法
-
修改参数
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(font='SimHei', font_scale=0.8, style="darkgrid")
df = sns.load_dataset("iris")
fig, ax = plt.subplots(1,3,constrained_layout=True, figsize=(12, 4))
ax_sub = sns.kdeplot(y=df['sepal_width'], fill=True, color="skyblue", ax=ax[0])
ax_sub.set_title('水平密度图')
ax_sub = sns.kdeplot(df['sepal_width'], fill=True, ax=ax[1])
ax_sub.set_title('增加阴影')
ax_sub = sns.kdeplot(df['sepal_width'], fill=True, bw_method=0.1, ax=ax[2])
ax_sub.set_title('降低带宽')
plt.show()

-
一图绘制多个变量
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('iris')
sns.kdeplot(df['sepal_width'], fill=True, color="r", label='sepal_width')
sns.kdeplot(df['sepal_length'], fill=True, color="b", label='sepal_length')
plt.legend()
plt.xlabel('sepal_width/sepal_length')
plt.show()

import numpy as np
from numpy import linspace
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde
df = pd.DataFrame({
'var1': np.random.normal(size=1000),
'var2': np.random.normal(loc=2, size=1000) * -1
plt.rcParams["figure.figsize"]=12,8
sns.kdeplot(data=df, x="var1", fill=True, alpha=1)
kde = gaussian_kde(df.var2)
x_range = linspace(min(df.var2), max(df.var2), len(df.var2))
sns.lineplot(x=x_range*-1, y=kde(x_range) * -1, color='orange')
plt.fill_between(x_range*-1, kde(x_range) * -1, color='orange')
plt.xlabel("numbers")
plt.axhline(y=0, linestyle='-',linewidth=1, color='black')
plt.show()

-
分组密度图
import seaborn as sns
import matplotlib.pyplot as plt
from plotnine.data import diamonds
sns.kdeplot(data=diamonds, x="price", hue="cut", fill=True, common_norm=False, alpha=0.4)
plt.show()

import seaborn as sns
import matplotlib.pyplot as plt
diamonds = sns.load_dataset('diamonds')
g = sns.FacetGrid(diamonds, col='cut', hue='cut', col_wrap=3)
g = g.map(sns.kdeplot,"price", cut=0, fill=True, common_norm=False, alpha=1, legend=False)
g = g.set_titles("{col_name}")
plt.show()

-
引申-绘制堆积图
import seaborn as sns
import matplotlib.pyplot as plt
diamonds = sns.load_dataset('diamonds')
sns.kdeplot(data=diamonds, x="price", hue="cut", common_norm=False, multiple="fill", alpha=1)
plt.show()
以上通过seaborn的kdeplot
可以快速绘制密度图,也可通过gaussian_kde
构建密度函数后再通过matplotlib进行简单绘制,并通过修改参数或者辅以其他绘图知识自定义各种各样的密度图来适应相关使用场景。
台风天,适合敲代码。前两天正好看到一个有意思的核密度图,使用的是seaborn绘制的。之前了解过这个包,但是一致没有去绘制相关的图,这次正好去学习一下相关的函数。绘制结果如下所示:主要两个有意思的地方在一张图上同时绘制两次填色图,一个有意思的实现在核密度填色图的两侧分别绘制数量占比的柱形图。
目录1. 直方图、箱线图和密度图1.1 直方图1.2 箱线图1.3 密度图2. 正态分布3. 偏度和峰度结论 直方图、箱线图和密度图是数据分析中十分常用的图形。它们可以帮助我们更好地理解数据的分布情况,从而更好地进行数据分析和处理。在这篇博客中,我们将介绍它们的基本原理、用途以及如何在Python中使用代码来实现。直方图是一种常用的数据分布图,它将数据分成若干个区间,然后统计每个区间内数据的个数。通常情况下,直方图的横轴表示数据范围,纵轴表示数据出现的频数或者频率。直方图适用于连续性数据的分布情况。下面是P
原创 黄小仙
上次分享了小提琴曲线(violin plot)的作图方法,今天小仙同学给大家介绍一下如何用R画出漂亮的密度图(density plot)。
Step1. 绘图数据的准备
首先还是要把你想要绘图的数据调整成R语言可以识别的格式excel中保存成csv格式。
数据的格式如下图:一列表示一种变量,第一行是列名
Step2. 绘图数据的读取
data<-read.csv(“your...
密度散点图(Density Scatter Plot),也称为密度点图或核密度估计散点图,是一种数据可视化技术,主要用于展示大量数据点在二维平面上的分布情况。与传统散点图相比,它使用颜色或阴影来表示数据点的密度,从而更直观地展示数据的分布情况。密度散点图能更好地揭示数据的集中趋势和分布模式,尤其是在数据量非常大时,避免了散点图中点重叠导致的可视化混乱问题。