시작하기 전에 import 하기
import plotly.graph_objects as go import plotly.express as px from plotly.subplots import make_subplots import plotly.graph_objects as go import plotly.graph_objects as go import plotly.express as pxgraph_objects 를 사용하기 위해 먼저 개발환경에 graph_objects 를 go 라는 별칭으로 불러옵니다.
그래프를 하나하나 설명하고 직접 지정하며 제작하는 방법입니다.
# graph_objects 패키지를 go 로 불러옴 import plotly.graph_objects as go # go.Figure() 함수를 활용하여 기본 그래프를 생성 fig = go.Figure( # Data 입력 data=[go.Bar(x=[1, 2, 3], y=[1, 3, 2])], # layout 입력 layout=go.Layout( title=go.layout.Title(text="A Figure Specified By A Graph Object") ) ) #show하면 내 노트북 (주피터 노트북 등)에 그래프가 나타남 fig.show()위에 막대 그래프를 2가지 방법을 활용하여 시각화 하는 방법에 대해 알아 보겠습니다.
import plotly.graph_objects as gograph_objects 를 사용하기 위해 먼저 개발환경에 graph_objects 를 go 라는 별칭으로 불러옵니다.
fig = go.Figure( # Data 입력 data=[go.Bar(x=[1, 2, 3], y=[1, 3, 2])], # layout 입력 layout=go.Layout( title=go.layout.Title(text="A Figure Specified By A Graph Object")) )Figure는 Plotly 작업의 기본 단위 입니다. Figure는 go.Figure() 함수를 통해 생성이 가능합니다. 이때 go.Figure 힘수의 구조는 아래와 같습니다. data와 layout 총 2개를 input으로 받는 구조입니다.
data는 일명 "Trace" 를 Python List 형태로 받습니다. Trace는 그리고자 하는 그래프의 타입(ex. Bar, Scatter, Line, Box..)과 그 그래프에 시각화 하고자 하는 Raw 데이터를 품고있는 단위 입니다.
예를들면 위의 예제에서는 go.Bar(x=[1, 2, 3], y=[1, 3, 2]) 가 하나의 Trace가 됩니다. 리스트 형태로 받는 이유는 하나의 Figure에 다양한 Trace를 동시에 시각화를 하기위헤 리스트 형태로 받습니다.
그래프의 data와는 무관하고 그외 모든 부분을 편집 및 가공하는 부분입니다. Title, legend, Colors, Hover-label, Axes, Shape 등 그래프 등 시각화를 높히기 위한 다양한 도구들은 모두 layout을 통해 지정합니다.
fig.show()Figure를 받은 객체에 show() 함수를 마지막에 작성하면 랜더링 과정을 통해 내 주피터 노트북 출력 셀에 그래프가 나타납니다.
그래프를 이미 제작되어있는 템플릿으로 빠르게 제작하는 방법으로 매우 짧은 코드만으로 양질의 그래프를 제작할수있는 high-level 모듈 입니다.
graph_objects 모듈과 express 모듈은 Matplotlib과 Seaborn 의 사이와 같습니다. Matplotlib 를 기반으로 만들어진 Seaborn 이미 만들어진 템플릿을 활용하여 더 쉽게 사용이 가능하듯이 express 또한 graph_objects 로 제작이 된 모듈로 사용이 더욱 쉽습니다.
또하나 비슷한 점은 Seaborn 을 Matplotlib의 문법을 활용해서 튜닝이 가능하듯 express 또한 graph_objects의 기능인 add_trace(), update_layout(), update_traces() 기능을 활용하여 세세한 튜닝이 가능합니다. "Todo" 링크 연결import plotly.express as px # px.bar() 함수를 활용해서 bar chart 생성과 동시에 Data, Layout 값 입력 fig = px.bar(x=["a", "b", "c"], y=[1, 3, 2],title="A Figure Specified By express") #show하면 내 노트북 (주피터 노트북 등)에 그래프가 나타남. fig.show()
import plotly.express as pxexpress 를 사용하기 위해 먼저 개발환경에 express 를 px 라는 별칭으로 불러옵니다.
fig = px.bar(x=["a", "b", "c"], y=[1, 3, 2], title="A Figure Specified By express")px.bar 를 활용해서 바로 그래프의 타입을 bar로 지정하고, x, y 에 각각 데이터를 넣어줍니다. 마지막으로 title 또한 펑션안에서 바로 넣어주어서 매우 짧은 코드만으로 Figure 제작을 완료하였습니다.
지금 현재 px.bar 와 같이 express 를 통해 제작된 템플릿은 아래와 같습니다.Basics: scatter, line, area, bar, funnel, timeline
Part-of-Whole: pie, sunburst, treemap, icicle, funnel_area
1D Distributions: histogram, box, violin, strip, ecdf
2D Distributions: density_heatmap, density_contour
Matrix or Image Input: imshow
3-Dimensional: scatter_3d, line_3d
Multidimensional: scatter_matrix, parallel_coordinates, parallel_categories
Tile Maps: scatter_mapbox, line_mapbox, choropleth_mapbox, density_mapbox
Outline Maps: scatter_geo, line_geo, choropleth
Polar Charts: scatter_polar, line_polar, bar_polar
Ternary Charts: scatter_ternary, line_ternary
fig.show()Figure를 받은 객체에 show() 함수를 마지막에 작성하면 랜더링 과정을 통해 내 주피터 노트북 출력 셀에 그래프가 나타납니다.
2가지 방법은 아래의 표와 같은 장단점이 있습니다.
express는 사용자가 빠르게 데이터 분석을 진행할때 활용을 추천합니다.
graph_objects 는 논문, 발표자료와 같이 그래프 visualization에 중점을 두었을 경우 활용을 추천합니다.
Plotly에서 그래프를 그리는 가장 보편적인 방법은 아래 그림과 같이 기초 그래프를 생성 후 다양한 방법으로 그래프를 업데이트하는 2단계를 거치는 방법입니다. 이번 장에서는 2번째 단계인 그래프를 업데이트 하는 5가지의 함수 기능에 대해 간략히 설명드리겠습니다.
앞으로 진행 될 Plotly 기본 문법 및 여러 그래프들은 대부분 지금부터 소개 해 드릴 5개의 함수를 활용한 Plotly 그래프 튜닝 과정이라고 볼 수 있습니다.
사용법
fig.add_trace(추가할 Trace 입력)add_trace() 함수를 활용하면 Figure에 새로운 Trace를 추가 가능합니다. ex) go.Scatter, go.Bar...등등
예제 1) 빈 Figure 에 Trace 추가하기
import plotly.express as px fig = go.Figure() fig.add_trace(go.Bar(x=[1, 2, 3], y=[1, 3, 2])) fig.show()
예제 2) 이미 Trace가 있는Figure에Trace 추가하여 겹쳐 그리기
# 데이터 불러오기 df = px.data.iris() # express를 활용한 scatter plot 생성 fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", title="Using The add_trace() method With A Plotly Express Figure") fig.add_trace( go.Scatter( x=[2, 4], y=[4, 8], mode="lines", line=go.scatter.Line(color="gray"), showlegend=False) ) fig.show()
이미 생성된 scatterplot 위에 직선의 그래프를 add_trace()를 활용해서 추가합니다.
사용법
fig.update_traces(업데이트 내용)update_trace() 함수를 사용하면 이미 생성된 trace의 type, 색, 스타일, 템플릿 등 추가 편집이 가능합니다. 물론 처음 Trace를 생성할 때 스타일 지정을 해서 생성이 가능하지만 update_trace 를 활용하면 한번에 모든 Trace의 스타일 업데이트가 가능하여 코드의 길이를 줄일 수 있으며 가독성이 높은 코드구현을 위해 Trace 생성부 와 Trace 편집부를 나눠서 작성 가능하게 합니다.
from plotly.subplots import make_subplots # subplot 생성 fig = make_subplots(rows=1, cols=2) # Trace 추가하기 fig.add_scatter(y=[4, 2, 3.5], mode="markers", marker=dict(size=20, color="LightSeaGreen"), name="a", row=1, col=1) fig.add_bar(y=[2, 1, 3], marker=dict(color="MediumPurple"), name="b", row=1, col=1) fig.add_scatter(y=[2, 3.5, 4], mode="markers", marker=dict(size=20, color="MediumPurple"), name="c", row=1, col=2) fig.add_bar(y=[1, 3, 2], marker=dict(color="LightSeaGreen"), name="d", row=1, col=2) # 한번에 Bar plot 만 파란색으로 바꾸기 fig.update_traces(marker=dict(color="RoyalBlue"), selector=dict(type="bar")) fig.show()
총 4개의 Trace를 생성하였습니다.
update_traces() 를 활용하여 4개 중 Barplot만 RoyalBlue 색으로 한번에 변경하였습니다.
사용법
fig.update_layout(업데이트 내용)update_layout() 함수를 사용하면 그래프 사이즈, 제목 및 텍스트, 글꼴크기 와 같은 Trace 외적인 그래프 요소를 업데이트 가능합니다.
import plotly.graph_objects as go #그래프 생성 fig = go.Figure(data=go.Bar(x=[1, 2, 3], y=[1, 3, 2])) # 타이틀 추가하기 fig.update_layout(title_text="Using update_layout() With Graph Object Figures",title_font_size=30) fig.show()
update_layout() 를 활용하여 타이틀을 추가하였습니다.
사용법
fig.update_xaxes(업데이트 내용) fig.update_yaxes(업데이트 내용)update_xaxes(), update_yaxes() 함수를 사용하면 각각 X축, Y축에 관한 다양한 편집이 가능합니다. ex) 축 타이틀, 축 라인 스타일, 그리드 설정 등
import plotly.graph_objects as go import plotly.express as px #데이터 생성 df = px.data.tips() x = df["total_bill"] y = df["tip"] # 그래프 그리기 fig = go.Figure(data=go.Scatter(x=x, y=y, mode='markers')) # 축 타이틀 추가하기 fig.update_xaxes(title_text='Total Bill ($)') fig.update_yaxes(title_text='Tip ($)') fig.show()
update_xaxes(), update_yaxes() 를 활용하여 축 타이틀을 추가하였습니다.