您的位置:

python画分布图

一、分布图介绍

分布图(Distribution Plot)是数据可视化中一类常见的图表。它主要用于显示单变量或多个变量的分布情况。分布图可以通过直方图、核密度图、箱线图等形式来展现数据的分布情况。在数据探索和分析中,分布图是非常重要的工具。

二、直方图

直方图是展示单变量分布情况的一种方式。在分布图中,数据被分成多个等距的区间,然后给出每个区间内数据个数的条形图。直方图通常用来观察数据是否服从正态分布。Python有很多库可以用来绘制直方图,其中最常用的是matplotlib和seaborn库。

1.使用matplotlib绘制直方图

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.normal(0, 1, 1000)

# 绘制直方图
plt.hist(data, bins=30, density=True, alpha=0.5)

# 添加标题和轴标签
plt.title('Histogram of Random Data')
plt.xlabel('Value')
plt.ylabel('Frequency')

plt.show()

以上代码通过numpy库生成1000个正态分布数据,然后使用matplotlib库中的hist函数绘制直方图。bins参数指定数据被分成的区间数量,density参数用于归一化数据,alpha参数用于设置透明度。最后可以通过添加标题和轴标签让图像更加清晰易懂。

2.使用seaborn绘制直方图

import seaborn as sns
import numpy as np

# 生成随机数据
data = np.random.normal(0, 1, 1000)

# 绘制直方图
sns.histplot(data, kde=True)

# 添加标题和轴标签
plt.title('Histogram of Random Data')
plt.xlabel('Value')
plt.ylabel('Frequency')

plt.show()

以上代码使用seaborn库中的histplot函数绘制直方图,kde参数用于添加核密度估计图。相比于matplotlib库,seaborn库的绘图风格更为美观。在实际开发中,可以根据实际需要选择适合的库。

三、核密度图

核密度图(KDE)是展示单变量或多变量分布情况的一种方式。在分布图中,每个数据点被视为一个高斯核函数,然后将所有核函数叠加在一起形成一条平滑的曲线。核密度图通常用来观察数据是否存在多个峰值,以及峰值的位置和数量。Python中最常用的库是seaborn和plotly。

1.使用seaborn绘制核密度图

import seaborn as sns
import numpy as np

# 生成随机数据
data = np.random.normal(0, 1, 1000)

# 绘制核密度图
sns.kdeplot(data, shade=True)

# 添加标题和轴标签
plt.title('Kernel Density Plot of Random Data')
plt.xlabel('Value')
plt.ylabel('Density')

plt.show()

以上代码使用seaborn库中的kdeplot函数绘制核密度图,shade参数用于填充曲线下方的区域。通过添加标题和轴标签,可以使图像更加美观易懂。

2.使用plotly绘制核密度图

import plotly.express as px
import numpy as np

# 生成随机数据
data = np.random.normal(0, 1, 1000)

# 绘制核密度图
fig = px.density_contour(data)

# 设置图像布局
fig.update_layout(
    title='Kernel Density Plot of Random Data',
    xaxis_title='Value',
    yaxis_title='Density'
)

fig.show()

以上代码使用plotly库中的density_contour函数绘制核密度图。相比于seaborn库,plotly库的图像交互性更强,可以更加方便地进行数据探索和分析。

四、箱线图

箱线图(Box Plot)是展示单变量或多变量分布情况的一种方式。在箱线图中,数据被分成多个组别,每个组别中数据的五个统计量(最小值、最大值、中位数、上四分位数和下四分位数)被展示在盒子中。箱线图通常用来观察数据是否存在异常值,以及分析不同组别之间的差异。Python中最常用的库是matplotlib、seaborn和plotly。

1.使用matplotlib绘制箱线图

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = [np.random.normal(0, 1, 100) for i in range(5)]

# 绘制箱线图
plt.boxplot(data)

# 添加标题和轴标签
plt.title('Box Plot of Random Data')
plt.xlabel('Group')
plt.ylabel('Value')

plt.show()

以上代码使用matplotlib库中的boxplot函数绘制箱线图。在本例中,我们随机生成了5组数据,然后使用boxplot函数将这五组数据汇总在一起展示。通过添加标题和轴标签,可以使图像更加清晰易懂。

2.使用seaborn绘制箱线图

import seaborn as sns
import numpy as np

# 生成随机数据
data = [np.random.normal(0, 1, 100) for i in range(5)]

# 绘制箱线图
sns.boxplot(data=data)

# 添加标题和轴标签
plt.title('Box Plot of Random Data')
plt.xlabel('Group')
plt.ylabel('Value')

plt.show()

以上代码使用seaborn库中的boxplot函数绘制箱线图。相比于matplotlib库,seaborn库的图像风格更为美观。可以在实际开发中根据需要选择适合的库。

3.使用plotly绘制箱线图

import plotly.express as px
import numpy as np

# 生成随机数据
data = [np.random.normal(0, 1, 100) for i in range(5)]

# 绘制箱线图
fig = px.box(x=np.repeat(['Group'],5), y=np.concatenate(data))

# 设置图像布局
fig.update_layout(
    title='Box Plot of Random Data',
    xaxis_title='Group',
    yaxis_title='Value'
)

fig.show()

以上代码使用plotly库中的box函数绘制箱线图。在本例中,我们将五组数据拼接在一起后传入box函数进行绘制。相比于其他库,plotly库支持更多的图像交互和定制,可以满足更加严格的数据需求。