Python 如何绘制茎叶图

茎叶图是一种用于可视化数据分布的有用工具,尤其在统计分析中。这种图形能帮助我们快速了解数据的中心趋势和变异性。Python 提供了多种绘制茎叶图的方式,包括通过 matplotlibstatsmodels 等库。接下来,我们将详细介绍如何在 Python 中绘制茎叶图,并附带示例代码。

1. 什么是茎叶图?

茎叶图(Stem-and-Leaf Plot)是一种用于展示数据分布的统计图。它将数据分为两部分:茎(stem)和叶(leaf)。茎一般是数据的最高位数字,而叶则是最低位数字。这样可以直观地看到各个数据的分布情况。例如,对数字 23 和 25,数字 2 是茎,数字 3 和 5 是叶。

2. 使用 Python 绘制茎叶图的步骤

2.1 环境准备

在开始之前,我们需要确保已经安装了所需的库。可以使用以下命令安装 matplotlibnumpy

pip install matplotlib numpy

2.2 导入库

在代码中,我们首先需要导入必要的库:

import numpy as np
import matplotlib.pyplot as plt

2.3 生成数据

这里我们生成一组随机数据以供绘制茎叶图之用。假设我们要绘制一组代表学生考试成绩的随机分数:

data = np.random.randint(50, 100, size=30)  # 生成30个50到100之间的随机整数
print("生成的数据:", data)

2.4 茎叶图的创建

我们将使用 matplotlib 来绘制茎叶图,具体实现如下:

def stem_leaf_plot(data):
    """绘制茎叶图"""
    # 将数据按照升序排列
    data.sort()
    
    # 提取茎和叶
    stems = data // 10   # 提取十位作为茎
    leaves = data % 10   # 提取个位作为叶
    
    unique_stems = np.unique(stems)  # 获取唯一的茎值
    print("茎: ", unique_stems)

    # 创建图形
    plt.figure(figsize=(8, 6))
    for stem in unique_stems:
        # 找到对应于当前茎的所有叶
        leaf_values = leaves[stems == stem]
        # 绘制
        plt.text(stem, 0, ''.join(map(str, leaf_values)), fontsize=12, ha='center')
    
    plt.xlabel('茎')
    plt.yticks([])  # 隐藏Y轴
    plt.title('茎叶图')
    plt.grid()
    plt.show()

# 调用函数绘制茎叶图
stem_leaf_plot(data)

2.5 代码解析

  • 首先,生成了一组包含 30 个随机数的数据,并将其按升序排列。
  • 然后,数据被分为茎和叶,其中 data // 10 获取各个数的十位数(作为茎),而 data % 10 获取个位数(作为叶)。
  • 接着,使用 plt.text() 绘制茎叶图,最后调用 plt.show() 显示图像。

2.6 运行示例

运行上述代码,你会看到生成的茎叶图,它展现了数据的分布情况。茎对应 X 轴,所有的叶则沿着每个茎水平排列。

3. 流程图

流程图可以帮助更好地理解整个绘制茎叶图的过程。以下是绘制茎叶图的流程图:

flowchart TD
    A[开始] --> B[导入库]
    B --> C[生成随机数据]
    C --> D[将数据按升序排列]
    D --> E[提取茎和叶]
    E --> F[绘制茎叶图]
    F --> G[显示图形]
    G --> H[结束]

4. 总结

通过以上步骤,我们成功地学习了如何在 Python 中绘制茎叶图。茎叶图帮助我们快速可视化数据的分布和趋势;利用 matplotlibnumpy,我们可以方便地处理和展示数据。

这种图形在统计分析、教育和其他许多领域的应用都相当广泛。不妨尝试用不同的数据集重复这个过程,感受一下不同数据带来的变化!

希望你通过这一教程,可以更好地理解和应用茎叶图。若有任何问题,欢迎讨论和交流!