一、分布图介绍
分布图(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库支持更多的图像交互和定制,可以满足更加严格的数据需求。