달나라 노트

Python matplotlib : stacked bar (bar method로 stacked bar graph 그리기) 본문

Python/Python matplotlib

Python matplotlib : stacked bar (bar method로 stacked bar graph 그리기)

CosmosProject 2024. 4. 10. 02:00
728x90
반응형

 

 

 

matplotlib의 bar method를 가지고 stacked bar graph를 그릴 수 있습니다.

 

(bar method = https://cosmosproject.tistory.com/427)

 

 

 

import matplotlib.pyplot as plt
import numpy as np

arr_bottom = np.array([0, 0, 0, 0])

list_x = ['2021', '2022', '2023', '2024']
arr_row_1 = np.array([34, 86, 94, 20])
arr_row_2 = np.array([59, 4, 98, 93])

plt.bar(list_x, arr_row_1,
        bottom=arr_bottom,
        width=0.5,
        color='pink')

arr_bottom = arr_bottom + arr_row_1
print(arr_bottom)

plt.bar(list_x, arr_row_2,
        bottom=arr_bottom,  # bottom 옵션을 통해 bar graph의 시작 지점 설정
        width=0.5,
        color='lightblue')

plt.show()

 

bottom option을 이용하면 bar graph의 시작을 지정할 수 있습니다.

따라서 bottom option을 이용하여 stacked bar graph를 그릴 수 있습니다.

 

 

코드의 결과입니다.

아래쪽에 분홍색 그래프가, 위쪽에는 하늘색 그래프가 존재합니다.

 

 

 

 

이번엔 4중 stack bar graph를 구현해 보았습니다.

 

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

dict_sales = {
    'apple': [34, 86, 94, 20],
    'peach': [59, 4, 98, 93],
    'graph': [59, 14, 26, 51],
    'orange': [31, 5, 25, 84]
}
df_sales = pd.DataFrame(dict_sales)
print(df_sales)

list_column_label = list(df_sales.columns)
list_row_label = ['2021', '2022', '2023', '2024']
arr_bottom = np.array([0, 0, 0, 0])

for idx, col in enumerate(list_column_label):
    data = np.array(df_sales.loc[:, col])
    plt.bar(list_row_label, data,
            bottom=arr_bottom,
            width=0.5,
            label=col)

    arr_bottom = arr_bottom + data

plt.legend(loc='upper left')
plt.show()




-- Result
   apple  peach  graph  orange
0     34     59     59      31
1     86      4     14       5
2     94     98     26      25
3     20     93     51      84

 

 

apple, peach, graph, orange 각각의 데이터가 동일한 색상을 가지도록 stack 되었으며,

legend를 나타내어 각 색깔이 무슨 항목을 의미하는지 까지 명시하였습니다.

 

 

 

 

 

728x90
반응형
Comments