Plotly
Plotly
1. 개요
Plotly는 데이터 분석 및 시각화를 위해 설계된 오픈 소스 인터랙티브 그래프 라이브러리로, 웹 브라우저 기반의 동적인 시각화 결과물을 생성하는 도구입니다. 정적인 이미지를 생성하는 기존 라이브러리와 달리, 사용자가 그래프와 직접 상호작용할 수 있는 인터랙티브(Interactive) 기능을 제공하는 것이 핵심입니다. Plotly는 Python, R, Julia 등 주요 데이터 과학 언어를 모두 지원하며, JSON 기반의 JavaScript\/Plotly.js" class="wiki-link wiki-link-missing">Plotly.js 라이브러리를 통해 웹 환경에서 렌더링됩니다.
2. 주요 특징 및 장점
Plotly의 가장 큰 특징은 웹 표준 기술(HTML, CSS, JavaScript)을 사용하여 그래프를 출력한다는 점입니다. 이를 통해 다음과 같은 인터랙티브 기능을 기본적으로 제공합니다.
- 줌(Zoom) 및 팬(Pan): 특정 영역을 확대하거나 화면을 이동하며 세부 데이터를 탐색할 수 있습니다.
- 호버(Hover): 마우스 커서를 데이터 포인트 위에 올리면 해당 지점의 상세 값(Tooltip)이 표시됩니다.
- 범례 필터링: 범례(Legend)의 항목을 클릭하여 특정 데이터 시리즈를 화면에서 숨기거나 다시 나타나게 할 수 있습니다.
- 웹 통합: 생성된 그래프는 HTML 파일로 저장하거나 웹 페이지에 직접 임베딩할 수 있어 공유와 배포가 용이합니다.
타 시각화 라이브러리와의 비교
| 구분 | Matplotlib | Seaborn | Plotly |
|---|---|---|---|
| 성격 | 저수준(Low-level) 기본 라이브러리 | 고수준(High-level) 통계 라이브러리 | 인터랙티브 웹 기반 라이브러리 |
| 출력 형태 | 정적 이미지 (PNG, PDF 등) | 정적 이미지 (Matplotlib 기반) | 동적 HTML/JavaScript |
| 상호작용 | 제한적 (기본적으로 정적) | 제한적 (기본적으로 정적) | 매우 높음 (줌, 호버, 필터링) |
| 학습 곡선 | 높음 (세밀한 설정 필요) | 낮음 (간결한 API) | 중간 (Express 사용 시 매우 낮음) |
| 주 용도 | 논문용 정적 그래프, 기본 시각화 | 통계 분석, 데이터 탐색(EDA) | 대시보드, 웹 보고서, 복잡한 데이터 탐색 |
3. 설치 방법 및 환경 설정
Plotly는 <a href="/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%8C%A8%ED%82%A4%EC%A7%80%20%EA%B4%80%EB%A6%AC%EC%9E%90/pip" class="wiki-link wiki-link-missing">pip</a> 또는 <a href="/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%8C%A8%ED%82%A4%EC%A7%80%20%EA%B4%80%EB%A6%AC%EC%9E%90/conda" class="wiki-link wiki-link-missing">conda</a> 패키지 관리자를 통해 간단히 설치할 수 있습니다.
설치 명령어
# pip를 사용하는 경우
pip install plotly
# conda를 사용하는 경우
conda install -c plotly plotly
환경 설정
Plotly는 기본적으로 웹 브라우저에서 결과물을 출력합니다. Jupyter Notebook이나 JupyterLab 환경에서 사용할 경우, 최신 버전의 Plotly는 별도의 설정 없이 렌더링되지만, 환경에 따라 다음과 같은 렌더러(Renderer) 설정이 필요할 수 있습니다.
import plotly.io as pio
pio.renderers.default = 'notebook' # 또는 'colab', 'browser' 등 설정
4. 핵심 모듈 및 구조
Plotly Python 라이브러리는 사용자의 목적에 따라 두 가지 수준의 API를 제공합니다.
4.1 Plotly Express (plotly.express)
고수준(High-level) API로, 단 몇 줄의 코드로 복잡한 그래프를 생성할 수 있도록 설계되었습니다. Pandas 데이터프레임과 매우 잘 연동되며, Python 리스트, NumPy 배열, JSON 형태의 데이터도 직접 지원하여 범용성이 높습니다. 데이터 탐색 단계(EDA)에서 빠르게 시각화 결과물을 확인해야 할 때 주로 사용됩니다.
4.2 Graph Objects (plotly.graph_objects)
저수준(Low-level) API로, 그래프의 모든 구성 요소(축, 레이아웃, 트레이스 등)를 세밀하게 제어할 수 있습니다. Plotly Express로 구현하기 어려운 복잡한 커스텀 그래프나, 여러 종류의 차트를 하나의 캔버스에 겹쳐 그려야 할 때 사용합니다.
※ 두 모듈의 관계: Plotly Express는 내부적으로 Graph Objects를 사용하여 그래프를 생성하는 고수준 래퍼(Wrapper)입니다. 따라서 Express로 생성한 fig 객체 역시 graph_objects.Figure 타입이며, 생성 이후 update_layout이나 update_traces를 통해 세밀한 수정이 가능합니다.
API 비교 예제
동일한 산점도를 두 가지 방식으로 구현하는 예시입니다.
import plotly.express as px
import plotly.graph_objects as go
# 데이터 준비
x_data = [1, 2, 3, 4]
y_data = [10, 11, 12, 13]
# 1. Plotly Express 방식 (간결함)
fig_express = px.scatter(x=x_data, y=y_data, title="Express 산점도")
# 2. Graph Objects 방식 (세밀한 제어)
fig_go = go.Figure(data=go.Scatter(x=x_data, y=y_data, mode='markers'))
fig_go.update_layout(title="Graph Objects 산점도")
5. 주요 시각화 유형 및 활용
Plotly는 단순한 2D 차트부터 고차원 데이터 시각화까지 폭넓은 유형을 지원합니다.
- 기본 차트: 선 그래프(
px.line), 막대 그래프(px.bar), 산점도(px.scatter), 파이 차트(px.pie) 등. - 통계 차트: 히스토그램(
px.histogram), 박스 플롯(px.box), 바이올린 플롯(px.violin) 등. - 고급 차트: 3D 산점도 및 표면도(
go.Scatter3d,go.Surface), 지리 정보 기반의 지도(px.choropleth), 주식 분석을 위한 캔들스틱(go.Candlestick) 차트 등.
데이터프레임 연동 및 산점도 구현 예제
Pandas 데이터프레임을 활용하여 plotly.express로 산점도를 구현하는 예제입니다.
import plotly.express as px
import pandas as pd
# 1. 샘플 데이터프레임 생성
data = {
'City': ['Seoul', 'Busan', 'Incheon', 'Daegu', 'Daejeon'],
'Population': [9.7, 3.4, 2.9, 2.4, 1.5], # 단위: 백만 명
'GDP': [400, 150, 120, 100, 90], # 가상 수치
'Region': ['North', 'South', 'North', 'South', 'Central']
}
df = pd.DataFrame(data)
# 2. Plotly Express를 이용한 산점도 생성
fig = px.scatter(df,
x='Population',
y='GDP',
text='City',
color='Region',
title='도시별 인구 대비 GDP 분석',
labels={'Population': '인구 (백만 명)', 'GDP': 'GDP (단위: 억 달러)'})
# 텍스트 위치 조정 및 출력
fig.update_traces(textposition='top center')
fig.show()
6. 차트 커스터마이징 방법
Plotly에서는 update_layout()과 update_traces() 메서드를 통해 그래프의 외형을 세밀하게 조정할 수 있습니다.
- 레이아웃 설정 (
update_layout): 배경색, 폰트, 제목, 축 이름, 범례 위치, 캔버스 크기 등을 설정합니다. - 트레이스 설정 (
update_traces): 데이터 포인트의 색상, 선의 굵기, 마커의 모양, 호버 텍스트 형식 등 데이터 표현 방식을 설정합니다.
# 커스터마이징 예시
fig.update_layout(
template='plotly_dark', # 다크 모드 테마 적용
title_font_size=24,
xaxis=dict(showgrid=False), # X축 그리드 제거
yaxis=dict(gridcolor='gray') # Y축 그리드 색상 변경
)
fig.update_traces(marker=dict(size=15, line=dict(width=2, color='DarkSlateGrey')))
7. Plotly Dash와의 연동
Dash는 Plotly를 기반으로 구축된 Python 프레임워크로, 단순한 그래프를 넘어 완전한 분석용 웹 애플리케이션(대시보드)을 제작할 수 있게 해줍니다.
설치 방법
Dash는 Plotly와 별도의 패키지로 제공되므로 추가 설치가 필요합니다.
pip install dash
핵심 특징 및 구조
- 구조: Dash는
Dash HTML Components(웹 페이지 구조 정의)와Dash Core Components(드롭다운, 슬라이더 등 인터랙티브 위젯 정의)로 구성됩니다. - 콜백(Callback) 메커니즘: 사용자가 드롭다운 메뉴에서 항목을 선택하면, 해당 입력값이 Python 함수로 전달되어 그래프를 실시간으로 업데이트하고 다시 웹 페이지에 렌더링하는 반응형 구조를 가집니다.
- 활용: 기업의 KPI 대시보드, 실시간 데이터 모니터링 시스템, 복잡한 파라미터 조정이 필요한 데이터 분석 도구 구축에 활용됩니다.
8. 학습 자원 및 생태계
Plotly는 강력한 커뮤니티와 풍부한 문서를 보유하고 있습니다.
- 공식 문서 (Plotly Python Graphing Library): API 레퍼런스와 함께 수많은 예제 코드가 제공되어 복사-붙여넣기 방식으로 빠르게 학습할 수 있습니다.
- Plotly Chart Studio: 코딩 없이 GUI 환경에서 데이터를 업로드하고 그래프를 생성할 수 있는 클라우드 기반 도구입니다. 생성된 차트는 다시 코드로 내보낼 수 있습니다.
- 커뮤니티: Stack Overflow 및 Plotly Forum을 통해 전 세계 사용자들의 질의응답과 최적화 팁을 얻을 수 있습니다.
이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.