카카오톡 알림이 울렸다.
"지윤아, 캡스톤 프로젝트 데이터 시각화 파트 맡게 됐다며? 축하해. 그런데 Matplotlib으로 하려고?"
강주원 선배였다. 졸업하고 데이터 분석 회사에 입사한 뒤로도 가끔 후배들 코딩 고민을 들어주는 사람이었다.
"네, 일단 Matplotlib이 익숙해서요."
"발표 때 교수님이 차트 특정 점 가리키면서 '이 값이 정확히 얼마냐'고 물어보면 어떻게 할 건데?"
지윤은 잠시 멈췄다. 그런 상황을 생각해본 적이 없었다.
"Plotly 써봐. 한 번 보면 바로 이해할 거야."
Plotly 설치
Plotly는 pip으로 설치합니다.
pip install plotly
이미 설치되어 있다면 최신 버전으로 업그레이드합니다.
pip install --upgrade plotly
설치 후 버전을 확인합니다.
import plotlyprint(plotly.__version__) # 예: 6.0.1
Jupyter Notebook 환경이라면 추가 패키지 없이 바로 사용할 수 있습니다. VS Code나 PyCharm에서도 브라우저로 차트가 열립니다.
첫 번째 인터랙티브 차트
Plotly에는 두 가지 API가 있습니다. Express와 Graph Objects입니다. 일단은 Express부터 시작합니다. Express는 plotly.express를 px로 줄여서 가져오는 것이 관례입니다.
# 파일: first_chart.pyimport plotly.express as pxfig = px.scatter( px.data.iris(), x="sepal_width", y="sepal_length", color="species")fig.show()
코드가 실행되면 브라우저가 열리면서 산점도가 나타납니다. 세 가지 붓꽃 종(setosa, versicolor, virginica)이 색으로 구분되어 있습니다.
지윤이 마우스를 한 점 위에 올렸다. 작은 상자가 떴다.
species=setosa
sepal_width=3.5
sepal_length=5.1
"이게 다에요?" 지윤이 선배에게 메시지를 보냈다.
"이게 다야. 근데 마우스 올려봐."
fig.show()의 동작 방식
fig.show()는 Figure 객체를 화면에 표시합니다. 환경에 따라 동작이 달라집니다.
| 환경 | 동작 |
|---|---|
| Python 스크립트(.py) | 기본 브라우저가 열리고 HTML로 표시 |
| Jupyter Notebook | 셀 아래에 인라인으로 표시 |
| Jupyter Lab | 셀 아래에 인라인으로 표시 |
| VS Code Notebook | 셀 아래에 인라인으로 표시 |
Plotly 차트는 사실 HTML + JavaScript 파일입니다. fig.show()가 내부적으로 임시 HTML을 만들어 브라우저로 열어주는 것입니다. 덕분에 인터넷 연결 없이도 완전한 인터랙티브 차트를 로컬에서 볼 수 있습니다.
HTML 파일로 저장하고 싶다면 fig.write_html()을 사용합니다.
# 파일: first_chart.pyimport plotly.express as pxfig = px.scatter( px.data.iris(), x="sepal_width", y="sepal_length", color="species")fig.write_html("iris_scatter.html")fig.show()
이렇게 저장한 HTML 파일은 브라우저에서 직접 열면 완전한 인터랙티브 차트로 동작합니다. 발표 자료에 붙이거나 팀원에게 공유할 때 유용합니다.
자주 묻는 질문
Q: 브라우저가 열리지 않아요.
fig.show()는 기본 브라우저를 사용합니다. 기본 브라우저가 설정되어 있지 않거나 서버 환경에서 실행 중이라면 열리지 않을 수 있습니다. 그럴 때는 fig.write_html("output.html")로 파일을 저장하고 직접 열어보세요.
Q: Matplotlib과 함께 써도 되나요?
물론입니다. 같은 프로젝트에서 Matplotlib과 Plotly를 함께 사용할 수 있습니다. 정적인 이미지가 필요할 때는 Matplotlib, 인터랙티브 차트가 필요할 때는 Plotly를 선택하면 됩니다.
Q: px.data.iris()는 뭔가요?
Plotly가 내장하고 있는 붓꽃(iris) 데이터셋입니다. 별도 파일 없이 바로 사용할 수 있어서 예제에 자주 등장합니다. 내장 데이터셋은 다음 절에서 자세히 다룹니다.