수평 막대 차트 (Horizontal Bar Chart) 로 이산 분포 시각화

Beginner

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

소개

이 랩에서는 수평 누적 막대 차트를 사용하여 이산 분포를 시각화하는 방법을 배웁니다. Python 에서 널리 사용되는 플로팅 라이브러리인 Matplotlib 을 사용하여 설문 조사 결과를 시각화합니다.

VM 팁

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

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

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

라이브러리 임포트

먼저 필요한 라이브러리를 임포트합니다. 이 랩에서는 Matplotlib 과 Numpy 를 사용합니다.

import matplotlib.pyplot as plt
import numpy as np

데이터 준비

범주와 설문 조사 결과를 정의해야 합니다. 이 예제에서는 사람들이 5 점 척도로 질문에 대한 동의 정도를 평가하는 설문 조사가 있습니다. 범주는 category_names로, 설문 조사 결과는 results로 정의합니다.

category_names = ['Strongly disagree', 'Disagree',
                  'Neither agree nor disagree', 'Agree', 'Strongly agree']
results = {
    'Question 1': [10, 15, 17, 32, 26],
    'Question 2': [26, 22, 29, 10, 13],
    'Question 3': [35, 37, 7, 2, 19],
    'Question 4': [32, 11, 9, 15, 33],
    'Question 5': [21, 29, 5, 5, 40],
    'Question 6': [8, 19, 5, 30, 38]
}

함수 정의

이제 resultscategory_names를 입력받아 수평 누적 막대 차트 시각화를 생성하는 survey라는 함수를 정의합니다.

def survey(results, category_names):
    """
    Parameters
    ----------
    results : dict
        질문 레이블에서 각 범주별 답변 목록으로의 매핑.
        모든 목록이 동일한 수의 항목을 포함하고 *category_names*의 길이와 일치한다고 가정합니다.
    category_names : list of str
        범주 레이블.
    """
    ## 결과를 numpy 배열로 변환
    labels = list(results.keys())
    data = np.array(list(results.values()))

    ## 수평 누적을 위해 데이터의 누적 합계 계산
    data_cum = data.cumsum(axis=1)

    ## 범주 색상 정의
    category_colors = plt.colormaps['RdYlGn'](
        np.linspace(0.15, 0.85, data.shape[1]))

    ## 플롯 생성 및 축 속성 설정
    fig, ax = plt.subplots(figsize=(9.2, 5))
    ax.invert_yaxis()
    ax.xaxis.set_visible(False)
    ax.set_xlim(0, np.sum(data, axis=1).max())

    ## 누적 막대 생성 및 막대 레이블 추가
    for i, (colname, color) in enumerate(zip(category_names, category_colors)):
        widths = data[:, i]
        starts = data_cum[:, i] - widths
        rects = ax.barh(labels, widths, left=starts, height=0.5,
                        label=colname, color=color)
        r, g, b, _ = color
        text_color = 'white' if r * g * b < 0.5 else 'darkgrey'
        ax.bar_label(rects, label_type='center', color=text_color)

    ## 범례 추가
    ax.legend(ncols=len(category_names), bbox_to_anchor=(0, 1),
              loc='lower left', fontsize='small')

    return fig, ax

함수 호출 및 결과 표시

마지막으로, resultscategory_names를 입력으로 사용하여 survey 함수를 호출하고 결과 시각화를 표시합니다.

survey(results, category_names)
plt.show()

요약

이 랩에서는 Matplotlib 을 사용하여 이산 분포를 시각화하기 위해 수평 누적 막대 차트를 만드는 방법을 배웠습니다. 범주와 설문 조사 결과를 정의하고, 플롯을 생성하는 함수를 만들고, 결과를 표시했습니다. 이 기술은 설문 조사 결과 또는 다른 유형의 이산 분포를 시각화하는 데 유용할 수 있습니다.