Matplotlib によるスタックプロットとストリームグラフ

MatplotlibMatplotlibBeginner
今すぐ練習

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Matplotlibを使ってスタックプロットとストリームグラフを作成する方法を学びます。スタックプロットは、複数のデータセットを垂直に積み重ねた領域として視覚化したい場合に便利です。ストリームグラフは、プロットの基準線がゼロに固定されないスタックプロットのバリエーションです。代わりに、基準線は「揺らめいて」おり、プロットの領域が滑らかになり、互いに流れ込みます。

VMのヒント

VMの起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebookを使って練習します。

時々、Jupyter Notebookが読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebookの制限により、操作の検証を自動化することはできません。

学習中に問題に直面した場合は、Labbyにお尋ねください。セッション後にフィードバックを提供してください。そうすれば、迅速に問題を解決します。

ライブラリのインポート

最初のステップは、必要なライブラリをインポートすることです。この場合、それはMatplotlibとNumPyです。

import matplotlib.pyplot as plt
import numpy as np

スタックプロットの作成

2番目のステップは、stackplot()関数を使ってスタックプロットを作成することです。1950年から2018年までの各大陸別の世界人口のスタックプロットを作成するために、国連の世界人口見通し(2019年改訂版)のデータを使います。

## 国連の世界人口見通し(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()

ストリームグラフの作成

3番目のステップは、baselineパラメータを'wiggle'に設定したstackplot()関数を使ってストリームグラフを作成することです。ガウス分布のランダムな混合物を作成し、それらをストリームグラフとして描画します。

## 再現性のための乱数シードの固定
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を使ってスタックプロットとストリームグラフを作成する方法を学びました。スタックプロットは、複数のデータセットを垂直に積み重ねた領域として視覚化するのに便利ですが、ストリームグラフは、基準線が「揺らめいて」プロットの領域が滑らかになり、互いに流れ込むようになったスタックプロットのバリエーションです。