📅  最后修改于: 2023-12-03 15:34:27.176000             🧑  作者: Mango
在统计学中,茎叶图是一种经常用于展示一组数据的可视化方式。茎叶图可以用于展示数据的分布情况和一些描述性统计量。在Python中,我们可以使用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来快速创建高质量的茎叶图,以可视化我们的数据并深入了解它们的分布情况。