차밍이
[Python] Plotly 누적 그룹 막대 그래프 그리기 - Stack and Group Bar Chart 본문
목차
Plotly를 사용해서 간단한 누적 막대 그래프와 그룹 막대 그래프를 그리는 것에 대해서는 이전 게시글을 확인해주세요.
이번 게시글에서는 그룹화된 누적 막대그래프를 그리는 방법에 대해서 알아보겠습니다.
엑셀로도 해보려고 했는데 잘되지 않아서 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 |