1. 前言
在数据分析和统计学中,绘制统计分布图是非常重要的,因为它帮助我们直观地理解数据的特性,并为进一步的分析提供基础。统计分布图能够揭示数据集的结构、趋势、集中趋势和离散程度等信息,从而使我们更容易做出合理的假设、判断和决策。
2. hist直方图
适用于不同样本来源的比较,小数据集,不同样本间的数据分布比较
或同一来源数据集作图选择合适统计模型
直方图是一个常用的工具,用于展示单个变量的分布。它将数据按区间(bins)划分,并通过条形图展示每个区间内数据的频率或数量。
2.1 直方图的使用场景
1. 查看数据分布
直方图最常用的场景是查看数值型数据的分布情况。通过直方图可以直观了解数据是偏向于正态分布、偏态分布,还是存在多个峰值(多峰分布)
2. 选择合适的统计模型
通过直方图的形状,可以帮助确定数据是否适合某种统计模型。例如,判断数据是否符合正态分布、均匀分布或指数分布等。
3. 比较多个数据集的分布
直方图还可以用于比较多个数据集的分布。通过叠加或并排显示不同数据集的直方图,可以对比它们的分布差异
2.2 代码与图
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
data = np.random.randn(1000)
# 绘制直方图
plt.hist(data, bins=30, alpha=0.7, color='b')
# 添加标题和标签
plt.title('Histogram')
plt.xlabel('Value')
plt.ylabel('Frequency')
# 显示图像
plt.show()
2.3 常见参数
bins | 指定数据区间的数量 |
alpha | 用于设置透明度,多个图形叠加时最好使用 |
color | 用于设置柱形的颜色 |
edgecolor | 设置图形元素的边缘颜色 |
linewidth | 控制线条的宽度,单位为point |
3. boxplot箱形图
适用于同一样本来源,大小数据集皆可,内部不同时间/状况的样本比较
显示一组数据的分布情况和统计特征,特别是用于比较不同数据集的分布。它通过显示数据的 五个数值摘要(最小值、下四分位数、中位数、上四分位数、最大值),以及识别异常值,帮助我们快速了解数据的分布、离散程度、中心趋势等信息。
3.1 使用场景
1. 数据分布的可视化
同时展示多个数据集的分布情况(如不同实验组、不同变量的结果)。
适合用来查看数据的对称性、偏态以及是否存在异常值。
2. 数据的对比
可以通过比较多个箱线图,直观地对比不同组数据的中心趋势、变异性和分布
例如,比较两个班级的考试成绩分布、不同产品的销售额分布。
3. 检测异常值
快速发现数据中的异常值(outliers)。位于箱线图“胡须”之外的数据点即为异常值,帮助分析潜在的极端情况。
4. 查看数据的集中趋势和离散程度
直观地看到数据的中位数和四分位数,判断数据的集中趋势和离散程度。
适合用于非对称分布数据的可视化,例如工资分布、房价分布等。
3.2 异常点分析
是的,boxplot
中的异常值通常是指超出 1.5 倍四分位距(IQR, Interquartile Range)范围的数据点。具体来说,IQR 是上四分位数(Q3)和下四分位数(Q1)之间的距离,即:
1.5 倍的 IQR 是一个常用的标准,用于标识数据中的异常值。这个标准来源于统计学中对数据分布的一个经验法则。
3.3 代码与作图
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data1 = np.random.normal(100, 10, 200)
data2 = np.random.normal(90, 20, 200)
data3 = np.random.normal(80, 15, 200)
# 绘制箱线图
plt.boxplot([data1, data2, data3], patch_artist=True, widths=0.6,
boxprops=dict(facecolor='lightblue'),
medianprops=dict(color='red', linewidth=2),
whiskerprops=dict(color='green'))
# 添加标题
plt.title("Boxplot Example")
plt.xticks([1,2,3],['A','B','C']) #指定修改标签
# 显示图形
plt.show()
3.4 相关参数
vert | 设置箱线图的方向。True为垂直,False为水平 |
patch_artist | 是否填充箱体,为True则填充 |
showfliers | 是否显示异常值 |
widths | 箱线图的宽度 |
positions | 图所在的位置。position=[1,2,4] |
boxprops | 控制箱体的样式,boxprops=dict(facecolor='',color='') |
flierprops | 设置异常值的样式,传入字典 |
showmeans | 是否显示数据的均值 |
4. errorbar误差条
适用于同一样本来源,小数据集,比较内部数据
误差条是用来展示每个数据的浮动误差,显示测量误差或者不确定性
4.1 使用场景
-
测量误差:当你有测量数据时,通常需要显示每个数据点的误差范围。error可以在数据点上添加误差条,帮助显示这些测量误差。
-
数据的不确定性:在科学实验或数据分析中,数据的准确性可能受到各种因素的影响,
errorbar
可以帮助你表示这些不确定性。 -
比较数据:当你比较不同实验组或条件下的数据时,误差条可以帮助你更好地理解数据的变异性和可靠性。
4.2 代码与作图
#errorbar
x = [2,4,6]
y = [3,7,11]
yerr = [0.3,0.5,0.9]
fig,ax = plt.subplots()
ax.errorbar(x,y,yerr,fmt='o',linewidth=3,capsize=10)
4.3 相关参数
fmt | 设置数据点的标记样式 |
ecolor | 设置误差线的颜色 |
linewidth | 设置误差线的宽度 |
capsize | 设置误差端点的长度 |
xerr | x轴数据的误差 |
yerr | y轴数据的误差 |
5. violinplot小提琴图
5.1 简介
同一样本或不同样本比较均可使用
Violin图是结合了箱线图和核密度线的图片,展示数据的分布情况。
核密度线(KDE):Violin的形状代表数据的分布密度。越宽表示该值附近的数据点多,窄就表示越少
两侧对称:左右分布是一样的,使图形更容易解读
5.2 代码与作图
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
# 生成随机数据
data = np.random.normal(size=100)
# 使用 seaborn 绘制 violin 图
sns.violinplot(data=data)
# 显示图形
plt.show()
6. pie饼状图
适用于同一样本来源,小数据集,内部种类比较
饼图适用于展示数据中各部分在整体中所占比例的场景。它能够直观地展示每个部分的相对大小,适合少量分类数据的可视化。
6.1 使用场景
1. 比例分析
当你想展示数据集中不同类别的占比,如市场份额、预算分配、人口构成等,饼图是很合适的选择。例如,展示公司不同产品线的销售额占比。
2. 数据种类较少
饼图通常只适用于少量分类数据(一般不超过 5-6 类)。如果分类过多,饼图会显得杂乱且难以阅读。
6.2 代码与作图
import matplotlib.pyplot as plt
# 数据
sizes = [15, 30, 45, 10]
labels = ['Apples', 'Bananas', 'Cherries', 'Dates']
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
explode = (0, 0.1, 0, 0) # 'Bananas' 部分稍微爆开
# 绘制饼图
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=140)
# 确保饼图为圆形
plt.axis('equal')
# 添加标题
plt.title("Fruit Consumption Pie Chart")
# 显示图形
plt.show()
6.3 相关参数
labels | label=['A','B'],添加标签 |
color | 自定义块的颜色 |
autopct | 显示每个部分的百分比 |
explode | explode=[0,0.1,0,0],设置每部分是否分离,分离的距离 |
shadow | 添加阴影效果 |
radius | 设置饼图的半径 |
pctdistance | 设置百分比标签与饼图中心的距离 |
7. hist2d二维直方图
适用于大数据集,同一样本来源的内部数据分布比较
适用于将两个变量的分布情况在二维平面上进行可视化。该函数会根据传入的两个变量,将数据按网格进行划分,并统计每个网格中的数据点数,最终生成一个二维热图。
7.1 使用场景
1. 分析两个连续变量之间的关系
当你有两个连续变量并想观察它们之间的相关性或分布模式时,hist2d()
是很好的工具。它会把数据分成网格(bins),并显示每个网格内的数据点数量。
2. 大规模数据集
将数据分箱处理,把数据点密集的区域以颜色浓度来表示,能够更加清晰地显示数据分布。
3. 数据量大的情况下替代散点图
如果数据量过大,散点图的点可能会重叠,导致图形难以解释。hist2d()
可以通过统计数据点数量,以颜色的深浅来表示点的密集程度,能够更好地处理数据重叠的问题。
7.2 代码与作图
import matplotlib.pyplot as plt
import numpy as np
# 生成一些随机数据
x = np.random.randn(10000) # 横轴数据
y = np.random.randn(10000) # 纵轴数据
# 绘制二维直方图
plt.hist2d(x, y, bins=30, cmap='Blues')
# 添加颜色栏
plt.colorbar(label='Counts')
# 显示图形
plt.show()
7.3 相关参数
bins | 设置每个维度上的箱子数,也决定了网格的分辨率,(3,4) |
range | 定义二维直方图的范围 |
cmap | 颜色映射,用于指定不同箱子计数的颜色,'Blues','Reds' |
density | 返回的数据归一化,总面积为1 |
cmin | 设定颜色强度的最小值,小于将被设置为透明 |
8. hexbin蜂窝图
适用于大数据集,同一样本来源的内部数据分布比较
8.1 简介
与hist2d效果相似,都用于可视化二维数据的分布情况
使用的是 六边形网格,将数据划分为蜂窝状的六边形区域。这使得视觉上更加紧凑,六边形网格在表示连续数据分布时可以减少“边界效应”,在某些情况下能比矩形网格更好地展示数据分布。
8.2 代码与作图
import numpy as np
import matplotlib.pyplot as plt
# 生成随机数据
x = np.random.randn(10000)
y = np.random.randn(10000)
# 绘制六边形分箱图
plt.hexbin(x, y, gridsize=30, cmap='Blues')
plt.colorbar(label='Counts')
plt.title('hexbin Example')
plt.show()
9. ecdf累计概率密度图
适用于小数据集,同一样本来源中数据大小分布比较
展示了数据集中每个数据点的值在整体数据中的累积百分比,即有多少比例的数据点小于等于某个值。
9.1 特点
-
1. 累积分布:ECDF 图展示的是每个数据点的值和它在整个数据集中的相对排名(累积百分比)。因此,纵轴(y 轴)表示的是累积概率,范围从 0 到 1,横轴(x 轴)是数据点的值。
-
2. 每个数据点对应一个累积概率:图中的每一个点表示一个数据点和它在数据集中所占的比例。例如,某个点的 y 值是 0.6,意味着 60% 的数据点小于或等于这个点的 x 值。
-
3. 对数据分布的完整描述:与直方图和密度图不同,ECDF 图展示了 每个数据点 的信息,避免了由于数据分箱导致的失真,因此它保留了数据的精确信息,适合小数据集。
9.2 代码与作图
a = np.random.normal(4,2,10)
print(a)
fig,ax = plt.subplots()
ax.ecdf(a)