Matplotlib 堆叠图和流图

MatplotlibMatplotlibBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何使用Matplotlib创建堆叠图和流图。当你想要将多个数据集可视化为垂直堆叠区域时,堆叠图很有用。流图是堆叠图的一种变体,其中图的基线不是固定在零。相反,基线会“摆动”,以便图的区域平滑并相互融合。

虚拟机提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问Jupyter Notebook进行练习。

有时,你可能需要等待几秒钟让Jupyter Notebook完成加载。由于Jupyter Notebook的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向Labby提问。课程结束后提供反馈,我们将立即为你解决问题。

导入库

第一步是导入必要的库,在这种情况下是Matplotlib和NumPy。

import matplotlib.pyplot as plt
import numpy as np

创建堆叠图

第二步是使用 stackplot() 函数创建一个堆叠图。我们将使用联合国《世界人口展望》(2019年修订版)的数据来创建一个1950年至2018年各大洲世界人口的堆叠图。

## 数据来自联合国《世界人口展望》(2019年修订版)
## https://population.un.org/wpp/,许可:CC BY 3.0 IGO
year = [1950, 1960, 1970, 1980, 1990, 2000, 2010, 2018]
population_by_continent = {
    'africa': [228, 284, 365, 477, 631, 814, 1044, 1275],
    'americas': [340, 425, 519, 619, 727, 840, 943, 1006],
    'asia': [1394, 1686, 2120, 2625, 3202, 3714, 4169, 4560],
    'europe': [220, 253, 276, 295, 310, 303, 294, 293],
    'oceania': [12, 15, 19, 22, 26, 31, 36, 39],
}

fig, ax = plt.subplots()
ax.stackplot(year, population_by_continent.values(),
             labels=population_by_continent.keys(), alpha=0.8)
ax.legend(loc='upper left', reverse=True)
ax.set_title('World population')
ax.set_xlabel('Year')
ax.set_ylabel('Number of people (millions)')

plt.show()

创建流图

第三步是使用 stackplot() 函数创建一个流图,并将 baseline 参数设置为 'wiggle'。我们将创建一个高斯混合随机数据集,并将其绘制成流图。

## 固定随机状态以确保可重复性
np.random.seed(19680801)


def gaussian_mixture(x, n=5):
    """返回在位置 *x* 处计算的 *n* 个高斯分布的随机混合。"""
    def add_random_gaussian(a):
        amplitude = 1 / (.1 + np.random.random())
        dx = x[-1] - x[0]
        x0 = (2 * np.random.random() -.5) * dx
        z = 10 / (.1 + np.random.random()) / dx
        a += amplitude * np.exp(-(z * (x - x0))**2)
    a = np.zeros_like(x)
    for j in range(n):
        add_random_gaussian(a)
    return a


x = np.linspace(0, 100, 101)
ys = [gaussian_mixture(x) for _ in range(3)]

fig, ax = plt.subplots()
ax.stackplot(x, ys, baseline='wiggle')
plt.show()

总结

恭喜你!你已经学会了如何使用Matplotlib创建堆叠图和流图。堆叠图对于将多个数据集可视化为垂直堆叠区域很有用,而流图是堆叠图的一种变体,其基线会“摆动”,从而使图的区域更加平滑且相互融合。