plotly의 그래프를 이중축으로 그려보겠습니다.
필요라이브러를 import 합니다.
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import plotly.express as px
plotly에서 기본 제공하는 stocks data를 불러옵니다.
df=px.data.stocks()
df.head(3)
AAPL(Apple)과 GOOG(Google) 데이터로 이중축 그래프를 그렸습니다.
make_subplots에서 secondary_y를 True로 설정합니다.
그 후 add_trace를 이용해서 각각의 그래프를 추가했습니다.
fig = make_subplots(specs=[[{"secondary_y":True}]])
fig.add_trace(
go.Scatter(x=df['date'], y=df['AAPL'], name="Apple"),
secondary_y=False,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['GOOG'], name="Google"),
secondary_y=True,
)
fig.show()
secondary_y=False는 좌측의 y축을 True는 우측의 y축을 사용합니다.
각 y축에 text를 넣어 확인해 보겠습니다.
secondary_y=False에 Apple을 True에 Google을 지정했습니다.
fig.update_yaxes(title_text="Apple", secondary_y=False, range=[0, 2])
fig.update_yaxes(title_text="Google", secondary_y=True, range=[0, 2])
전체 코드입니다.
fig = make_subplots(specs=[[{"secondary_y":True}]])
fig.add_trace(
go.Scatter(x=df['date'], y=df['AAPL'], name="Apple"),
secondary_y=False,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['GOOG'], name="Google"),
secondary_y=True,
)
fig.update_xaxes(title_text='date')
fig.update_yaxes(title_text="Apple", secondary_y=False)
fig.update_yaxes(title_text="Google", secondary_y=True)
fig.show()
좌측에 Apple, 우측에 Google text가 추가되었습니다.
다음으로는 각 y축의 max/min 값을 지정해보겠습니다.
fig.update_yaxes에 range에서 지정이 가능합니다.
fig = make_subplots(specs=[[{"secondary_y":True}]])
fig.add_trace(
go.Scatter(x=df['date'], y=df['AAPL'], name="Apple"),
secondary_y=False,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['GOOG'], name="Google"),
secondary_y=True,
)
fig.update_layout(
title_text="2 axis example",
)
fig.update_xaxes(title_text='date')
fig.update_yaxes(title_text="Apple", secondary_y=False, range=[0, 2])
fig.update_yaxes(title_text="Google", secondary_y=True, range=[0, 3])
fig.show()
좌측 y는 0~2, 우측은 0~3으로 범위가 지정이 되었습니다.
그래프의 제목은 위의 코드에 아래의 내용을 추가하면 됩니다.
fig.update_layout(
title_text="2 axis example",
)
마지막으로 subplot에 대해서 알아보겠습니다.
아래 회사가 6이니 이중축 그래프를 row방향으로 3개 추가해 보겠습니다.
전체 코드입니다.
fig = make_subplots(rows=2, cols=2,
specs=[[{"secondary_y": True}, {"secondary_y": True}],
[{"secondary_y": True}, {"secondary_y": True}]])
fig.add_trace(
go.Scatter(x=df['date'], y=df['AAPL'], name="Apple"),
secondary_y=False,row=1, col=1,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['GOOG'], name="Google"),
secondary_y=True,row=1, col=1,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['AMZN'], name="Amazon"),
secondary_y=False,row=1, col=2,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['FB'], name="Meta"),
secondary_y=True,row=1, col=2,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['NFLX'], name="Netflix"),
secondary_y=False,row=2, col=1,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['MSFT'], name="Microsoft"),
secondary_y=True,row=2, col=1,
)
fig.show()
subplot을 row방향으로 2개 column방향으로 2개 만들었습니다.
fig = make_subplots(rows=2, cols=2,
specs=[[{"secondary_y": True}, {"secondary_y": True}],
[{"secondary_y": True}, {"secondary_y": True}]])
secondary_y=False와 True의 2개씩 row, col을 지정했습니다.
Apple, Google의 경우에는 row=1, col=1을 지정했습니다.
fig.add_trace(
go.Scatter(x=df['date'], y=df['AAPL'], name="Apple"),
secondary_y=False,row=1, col=1,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['GOOG'], name="Google"),
secondary_y=True,row=1, col=1,
)
나머지도 동일한 방식으로 row, col을 지정합니다.
fig.add_trace(
go.Scatter(x=df['date'], y=df['AMZN'], name="Amazon"),
secondary_y=False,row=1, col=2,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['FB'], name="Meta"),
secondary_y=True,row=1, col=2,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['NFLX'], name="Netflix"),
secondary_y=False,row=2, col=1,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['MSFT'], name="Microsoft"),
secondary_y=True,row=2, col=1,
)
최종 그래프입니다.
아래의 코드에 row, col을 지정해서 y축의 text 및 range의 사용이 가능합니다.
fig.update_yaxes(title_text="Apple", secondary_y=False,
range=[0, 2], row=1,col=1)
fig.update_yaxes(title_text="Google", secondary_y=True,
range=[0, 2], row=1,col=1)
위 그래프의 전체 코드입니다.
fig = make_subplots(rows=2, cols=2,
specs=[[{"secondary_y": True}, {"secondary_y": True}],
[{"secondary_y": True}, {"secondary_y": True}]])
fig.add_trace(
go.Scatter(x=df['date'], y=df['AAPL'], name="Apple"),
secondary_y=False,row=1, col=1,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['GOOG'], name="Google"),
secondary_y=True,row=1, col=1,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['AMZN'], name="Amazon"),
secondary_y=False,row=1, col=2,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['FB'], name="Meta"),
secondary_y=True,row=1, col=2,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['NFLX'], name="Netflix"),
secondary_y=False,row=2, col=1,
)
fig.add_trace(
go.Scatter(x=df['date'], y=df['MSFT'], name="Microsoft"),
secondary_y=True,row=2, col=1,
)
fig.update_yaxes(title_text="Apple", secondary_y=False,
range=[0, 2], row=1,col=1)
fig.update_yaxes(title_text="Google", secondary_y=True,
range=[0, 2], row=1,col=1)
fig.update_yaxes(title_text="Amazon", secondary_y=False,
range=[0, 2], row=1,col=2)
fig.update_yaxes(title_text="Meta", secondary_y=True,
range=[0, 2], row=1,col=2)
fig.update_yaxes(title_text="Netflix", secondary_y=False,
range=[0, 2], row=2,col=1)
fig.update_yaxes(title_text="Microsoft", secondary_y=True,
range=[0, 2], row=2,col=1)
fig.update_xaxes(title_text='date')
fig.update_layout(title_text='2axis subplot example')
fig.show()
이상으로 plotly의 그래프를 이중축으로 만들어봤습니다.
'코딩TIPS' 카테고리의 다른 글
[plotly]pie 그래프 그리기 (4) | 2022.12.19 |
---|---|
[plotly] candle stick(캔들 차트)과 거래량, 이동평균 그래프 확인 (8) | 2022.12.03 |
[plotly] color_discrete_sequence (color palette 변경) (4) | 2022.11.17 |
[plotly] color_continuous_scale (color palette 변경) (8) | 2022.11.16 |
[plotly]bar 그래프 그리기 (4) | 2022.11.15 |