Python 直方图与纵坐标百分比

引言

直方图是数据可视化中常用的一种图表类型,用于展示数据的分布情况。在Python中,我们可以使用各种库来绘制直方图,如Matplotlib、Seaborn等。本文将介绍如何使用Matplotlib库来绘制直方图,并展示如何将纵坐标转换为百分比形式。

什么是直方图?

直方图是一种表示数据分布的图表,它将数据划分为若干个等宽的区间(也称为“箱子”或“柱子”),并统计每个区间中数据的频数或频率。直方图的横轴表示数据的取值范围,纵轴表示频数或频率。

直方图可以帮助我们更好地理解数据的分布情况,例如数据的集中程度、偏态、异常值等。通过观察直方图,我们可以对数据的特征有一个直观的认识。

如何使用Matplotlib绘制直方图?

在Python中,我们可以使用Matplotlib库来绘制各种类型的图表,包括直方图。下面是一个使用Matplotlib绘制直方图的简单示例代码:

import matplotlib.pyplot as plt

# 要绘制的数据
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]

# 绘制直方图
plt.hist(data, bins=5)

# 添加标题和标签
plt.title("Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")

# 显示图表
plt.show()

运行以上代码,可以得到一个简单的直方图。在这个示例中,我们使用了一个包含15个数据点的数据集,将其划分为5个区间,并统计每个区间的频数。

将纵坐标转换为百分比形式

在默认情况下,直方图的纵坐标表示频数(即每个区间中的数据个数)。然而,有时候我们更希望将纵坐标表示为百分比形式,以更好地比较不同区间的数据占比。下面是一个将纵坐标转换为百分比形式的示例代码:

import matplotlib.pyplot as plt
import numpy as np

# 要绘制的数据
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]

# 绘制直方图
n, bins, patches = plt.hist(data, bins=5)

# 将频数转换为百分比
bin_centers = 0.5 * (bins[:-1] + bins[1:])
percentage = 100 * n / len(data)

# 绘制百分比形式的纵坐标
plt.gca().yaxis.set_major_formatter(plt.PercentFormatter())

# 添加标题和标签
plt.title("Histogram")
plt.xlabel("Value")
plt.ylabel("Percentage")

# 在柱子上显示百分比
for i, patch in enumerate(patches):
    plt.text(bin_centers[i], n[i], f"{percentage[i]:.1f}%", ha='center')

# 显示图表
plt.show()

在这个示例代码中,我们使用了NumPy库来计算每个区间的中心点,并将频数转换为百分比。接着,我们使用plt.gca().yaxis.set_major_formatter(plt.PercentFormatter())将纵坐标的格式设置为百分比形式。

另外,我们还使用plt.text()在每个柱子上显示百分比值。plt.text(x, y, text, ha='center')函数可以在指定的坐标(x, y)处绘制文本。

序列图

下面是一个使用mermaid语法中的sequenceDiagram标识的绘制直方图的序列图示例:

sequenceDiagram
    participant 用户
    participant 程序
    用户 ->> 程序: 提供数据
    程序 ->> 程序: 统计