📜  Python中的茎叶图(1)

📅  最后修改于: 2023-12-03 15:34:27.176000             🧑  作者: Mango

Python中的茎叶图

在统计学中,茎叶图是一种经常用于展示一组数据的可视化方式。茎叶图可以用于展示数据的分布情况和一些描述性统计量。在Python中,我们可以使用Matplotlib库来创建茎叶图。

Matplotlib库介绍

Matplotlib是一个Python数据可视化库。它可以创建高质量的图表,包括线图、散点图、茎叶图和条形图等。Matplotlib可以与NumPy一起使用,方便地可视化数组。Matplotlib还支持不同风格的图表,包括科学、计算机和出版物等风格。

创建茎叶图

为了创建茎叶图,我们需要通过Matplotlib库来画出每个数据点的茎和叶子。茎叶图的茎代表位数(除以10的位数),叶子代表余数(除以10的余数)。

例如,数据点38,其茎部为3,代表十位数,其叶子为8,代表个位数。将叶子数字竖排并根据其大小排序,即可得到茎叶图。

import matplotlib.pyplot as plt

def stem_plot(data):
    """
    Create a stem plot given data.
    """
    # Sort the data
    data.sort()
    
    # Calculate the number of stems required
    stems = [int(x/10) for x in data]
    num_stems = max(stems) - min(stems) + 1
    
    # Create a list of list of leaves
    leaves = [[] for _ in range(num_stems)]
    for i, x in enumerate(data):
        idx = stems[i] - min(stems)
        leaves[idx].append(x % 10)
    
    # Plot the stems and leaves
    fig, ax = plt.subplots()
    for i in range(num_stems):
        plt.stem([i]*len(leaves[i]), leaves[i], basefmt=' ')
        plt.xlim(min(stems)-1, max(stems)+1)
        plt.xticks(list(range(min(stems), max(stems)+1)))
        ax.set_xlabel('Stems')
        ax.set_ylabel('Leaves')
        ax.yaxis.set(ticks=list(range(0,10)))
    
    plt.show()

在上述代码中,我们首先将数据点进行排序,并计算需要的茎的数量。然后,我们创建一个茎和叶的列表,并对数据点进行取模(即计算余数),并将它们加入正确的列表。接下来,我们使用Matplotlib的stem函数来绘制出每个茎和叶的位置。

我们可以使用以下数据来测试我们的函数:

data = [10, 11, 21, 23, 29, 30, 31, 32, 33, 41, 43, 51, 55, 63, 64, 77, 79, 82, 85, 95]
stem_plot(data)

输出将是以下样子:

2 | 1
3 | 011223333
4 | 13343
5 | 1558
6 | 34
7 | 79
8 | 25
9 | 5

在这个茎叶图中,我们可以看到在20到30的范围内有7个数据点,值得注意的是,在50到60的范围内只有3个数据点。这样的茎叶图可以用来展示数据的分布情况,以及一些描述性统计量,例如中位数和四分位数等。

总结

茎叶图是一种简单而有用的数据可视化技术,Matplotlib库为我们提供了创建茎叶图的简便方法。我们可以使用Python来快速创建高质量的茎叶图,以可视化我们的数据并深入了解它们的分布情况。