Matplotlib 스택 플롯 및 스트림 그래프

Beginner

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

소개

이 랩에서는 Matplotlib 을 사용하여 스택 플롯 (stackplot) 과 스트림 그래프 (streamgraph) 를 만드는 방법을 배웁니다. 스택 플롯은 여러 데이터 세트를 수직으로 쌓인 영역으로 시각화하려는 경우에 유용합니다. 스트림 그래프는 플롯의 기준선이 0 으로 고정되지 않는 스택 플롯의 변형입니다. 대신, 기준선이 "구불구불"하게 움직여 플롯의 영역이 부드럽게 처리되고 서로 흘러 들어가도록 합니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 액세스하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화할 수 없습니다.

학습 중에 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 즉시 해결해 드리겠습니다.

라이브러리 임포트

첫 번째 단계는 필요한 라이브러리를 임포트하는 것입니다. 이 경우 Matplotlib 과 NumPy 입니다.

import matplotlib.pyplot as plt
import numpy as np

스택 플롯 생성

두 번째 단계는 stackplot() 함수를 사용하여 스택 플롯을 만드는 것입니다. 유엔 세계 인구 전망 (2019 년 개정) 의 데이터를 사용하여 1950 년부터 2018 년까지 대륙별 세계 인구의 스택 플롯을 생성합니다.

## data from United Nations World Population Prospects (Revision 2019)
## https://population.un.org/wpp/, license: 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()

스트림 그래프 생성

세 번째 단계는 baseline 매개변수를 'wiggle'로 설정하여 stackplot() 함수를 사용하여 스트림 그래프를 만드는 것입니다. 우리는 가우시안의 무작위 혼합을 생성하고 이를 스트림 그래프로 플롯합니다.

## Fixing random state for reproducibility
np.random.seed(19680801)


def gaussian_mixture(x, n=5):
    """Return a random mixture of *n* Gaussians, evaluated at positions *x*."""
    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 을 사용하여 스택 플롯과 스트림 그래프를 만드는 방법을 배웠습니다. 스택 플롯은 여러 데이터 세트를 수직으로 쌓인 영역으로 시각화하는 데 유용하며, 스트림 그래프는 플롯의 영역이 부드럽게 연결되어 서로 흘러가도록 기준선이 "wiggle"된 스택 플롯의 변형입니다.