차밍이
[Python] Plotly 누적 그룹 막대 그래프 그리기 - Stack and Group Bar Chart 본문
목차
Plotly를 사용해서 간단한 누적 막대 그래프와 그룹 막대 그래프를 그리는 것에 대해서는 이전 게시글을 확인해주세요.
[Python] Plotly 그래프 사용법 - Bar Plot
목차 Plotly 그래프 중 Bar Graph 그리는 방법에 대해 소개하겠습니다. express와 graph_objects 두 가지 방식을 모두 알아보겠습니다. 두 개의 차이가 궁금하다면 아래 글을 참고 해주세요. [Plotly] express와
chancoding.tistory.com
이번 게시글에서는 그룹화된 누적 막대그래프를 그리는 방법에 대해서 알아보겠습니다.
엑셀로도 해보려고 했는데 잘되지 않아서 Python Plotly를 통해서 그냥 구현하는게 빠르겠다 싶어서 알아보았습니다.
1단계 : 기본 데이터 생성
그래프를 그리기 위한 예시 데이터를 생성하겠습니다.
A지역
의 데이터가 더 크고 B지역
은 B-1지역
과 B-2지역
두 개로 나뉘어있다고 가정해서 데이터를 만들었습니다.
import pandas as pd
import numpy as np
import plotly.graph_objects as go
data = np.random.randint(0,100,size=(10,3)) + np.array([80,0,0])
df = pd.DataFrame(data, columns=['A지역', 'B-1지역', 'B-2지역'])
df
랜덤한 값이므로 다른 값이 나올 수 있습니다~
2단계 : Simple Bar Chart
우선 간단한 기본 바 그래프를 그려보면 다음과 같습니다.
기존에 BarChart를 그리는 방법에 대해서 설명할 때 아래와 같이 add_trace
를 통해서 go.Bar
객체를 추가하였었습니다.
fig = go.Figure()
for col in df.columns:
fig.add_trace(
go.Bar(x=df.index, y=df[col], name=col)
)
fig.show()
이번에는 기존과 다르게 Figure
객체를 생성할 때 바로 데이터를 추가하는 방식으로 진행해보겠습니다.
fig = go.Figure(
data=[
go.Bar(x=df.index, y=df['A지역'], name='A지역'),
go.Bar(x=df.index, y=df['B-1지역'], name='B-1지역'),
go.Bar(x=df.index, y=df['B-2지역'], name='B-2지역'),
]
)
fig.show()
그래프 결과는 위와 동일한 결과를 확인할 수 있습니다.
단순히 이렇게만 그려도 Group화 된 막대그래프를 그릴 수 있습니다.
하지만, 우리가 원하는 것은 B-1과 B-2를 같은 그룹으로 묶어서 쌓아 올리는 것입니다.
우선 같은 그룹으로 묶는 방법에 대해서 알아보겠습니다.
3단계 : offsetgroup 설정하기
go.Bar
에서 offsetgroup
이라는 옵션을 사용할 수 있습니다.
이 값을 사용해서 Bar 그래프를 그룹화할 수 있습니다.
fig = go.Figure(
data=[
go.Bar(x=df.index, y=df['A지역'], name='A지역', offsetgroup=0),
go.Bar(x=df.index, y=df['B-1지역'], name='B-1지역', offsetgroup=1),
go.Bar(x=df.index, y=df['B-2지역'], name='B-2지역', offsetgroup=1),
]
)
fig.show()
하지만 여기에 문제가 있습니다.
B-2 지역 데이터를 추가한 결과를 통해 비교해 보겠습니다.
offsetgroup
값이 동일한 두 개의 막대그래프가 겹쳐집니다.
둘 다 0부터 시작하니까 두 값을 합한 값의 높이를 확인할 수 없는 것이지요..ㅠ
4단계 : base 설정하기
3단계의 문제를 해결하기 위해서는 두 번째 B-2
지역의 Bar 시작지점이 B-1 offsetgroup
막대그래프 끝 지점에서 부터 시작해야 합니다.
그래서 Base
라는 옵션을 통해서 시작 지점을 어디서부터 할 것인지 기본 값을 넣어줄 수 있습니다.
fig = go.Figure(
data=[
go.Bar(x=df.index, y=df['A지역'], name='A지역', offsetgroup=0),
go.Bar(x=df.index, y=df['B-1지역'], name='B-1지역', offsetgroup=1),
go.Bar(x=df.index, y=df['B-2지역'], name='B-2지역', offsetgroup=1, base=df['B-1지역']),
]
)
fig.show()
이렇게 하면 아래와 같이 B-1 지역의 값이 끝나는 막대 위에서 부터 B-2 막대가 시작하는 것을 확인할 수 있습니다.
지금까지 Plotly를 사용한 그룹화된 누적 Bar Chart를 만들 수 있습니다.
'파이썬 > 데이터 시각화' 카테고리의 다른 글
[Python] Plotly 그래프 사용법 - Bar Plot (0) | 2023.01.21 |
---|---|
[Plotly] express와 graph_objects의 차이 / px와 go 차이 (0) | 2023.01.20 |
[Python] Plotly : subplot 만들기의 모든것 - subtitle, type 설정 포함 (0) | 2022.07.24 |
[Python] Plotly legend(범례) 의 모든 것 - 순서, 위치, 폰트 등 (0) | 2022.07.23 |
[Python] Plotly 자주 사용하는 Layout 설정 - title, 축 label, font, subtitle, position 등 (4) | 2022.06.19 |
[Python] Plotly 축 반전, x축 y축 반전 뒤집기 (2) | 2022.02.14 |
[Python] Plotly 그래프 사용법 - Line Plot (0) | 2021.01.28 |
[Python] Plotly 그래프 사용법 - Scatter Plot (0) | 2021.01.27 |