Plotly에서 도형(shape)을 그리기

Author

Gabriel Yang

Plotly에서 도형(shape)을 그리기

Plotly는 강력한 데이터 시각화 라이브러리로, 그래프에 다양한 도형을 추가하여 데이터를 시각적으로 강조할 수 있습니다.

도형을 사용하면 그래프의 특정 부분을 강조하거나, 중요한 데이터 포인트를 시각적으로 구분하는 데 유용합니다.

1. add_shape 메서드를 사용한 도형 추가

Plotly의 add_shape 메서드는 그래프에 다양한 형태의 도형을 추가할 수 있는 기능을 제공합니다. 도형의 종류에는 선, 사각형, 원, 타원 등이 있으며, 각 도형은 그래프의 특정 영역을 강조하는 데 사용됩니다.

기본 사용법

import plotly.graph_objects as go

# 기본 산점도 데이터 생성
fig = go.Figure(data=go.Scatter(x=[1, 2, 3, 4, 5], y=[10, 11, 12, 13, 14], mode='markers'))

# 도형 추가
fig.add_shape(
    type='rect',  # 도형의 종류
    x0=2, x1=4,  # x축의 시작과 끝
    y0=11, y1=13,  # y축의 시작과 끝
    line=dict(color='RoyalBlue', width=2),  # 테두리 색상과 두께
    fillcolor='LightSkyBlue',  # 채우기 색상
    opacity=0.3  # 투명도
)

# 그래프 출력
fig.show()

2. 다양한 도형 종류

Plotly에서 지원하는 도형 종류는 여러 가지가 있으며, 각각의 도형은 그래프에 특정한 형태로 표시됩니다.

2.1. 직선(Line)

직선은 type='line'으로 설정합니다. 선의 시작점과 끝점을 정의할 수 있습니다.

fig = go.Figure(data=go.Scatter(x=[1, 2, 3, 4, 5], y=[10, 11, 12, 13, 14], mode='markers'))

fig.add_shape(
    type='line',
    x0=2, x1=4,
    y0=12, y1=12,
    line=dict(color='Red', width=2)
)

fig.show()

2.2. 사각형(Rectangle)

사각형은 type='rect'으로 설정하며, 좌표로 영역을 정의합니다.

fig = go.Figure(data=go.Scatter(x=[1, 2, 3, 4, 5], y=[10, 11, 12, 13, 14], mode='markers'))

fig.add_shape(
    type='rect',
    x0=1, x1=5,
    y0=10, y1=15,
    fillcolor='LightGreen',
    opacity=0.3
)

fig.show()

2.3. 원(Circle) 및 타원(Ellipse)

원과 타원은 type='circle' 또는 type='ellipse'로 설정할 수 있습니다. Plotly에서는 원과 타원을 도형으로 직접 지원하지 않지만, add_shape를 사용하여 타원 모양의 도형을 만들 수 있습니다.

fig = go.Figure(data=go.Scatter(x=[1, 2, 3, 4, 5], y=[10, 11, 12, 13, 14], mode='markers'))

fig.add_shape(
    type='circle',  # Plotly에서 직접 지원하지 않지만 예제
    x0=2, x1=4,
    y0=11, y1=13,
    fillcolor='LightCoral',
    opacity=0.3
)

fig.show()

3. 도형의 스타일 조정

도형의 스타일은 linefillcolor 파라미터를 통해 조정할 수 있습니다.

  • line: 테두리의 색상, 두께, 스타일(dash) 등을 설정합니다.
  • fillcolor: 도형의 채우기 색상입니다. RGBA 값을 사용하여 색상과 투명도를 조절할 수 있습니다.
  • opacity: 도형의 투명도를 설정합니다.

스타일 예제

fig = go.Figure(data=go.Scatter(x=[1, 2, 3, 4, 5], y=[10, 11, 12, 13, 14], mode='markers'))

fig.add_shape(
    type='rect',
    x0=1, x1=4,
    y0=10, y1=15,
    line=dict(color='Orange', width=3, dash='dash'),
    fillcolor='LightPink',
    opacity=0.4
)

fig.show()

4. 도형의 레이아웃 조정

도형의 레이아웃을 조정하여 그래프의 레이아웃과 일관성을 유지할 수 있습니다. xaxis, yaxis의 범위와 도형의 크기, 위치를 조절하여 그래프의 디자인을 개선할 수 있습니다.

레이아웃 조정 예제

fig.update_layout(
    xaxis=dict(
        range=[0, 6]  # x축 범위 조정
    ),
    yaxis=dict(
        range=[5, 20]  # y축 범위 조정
    )
)

5. 도형을 활용한 데이터 강조

도형을 사용하여 데이터의 특정 범위나 중요 포인트를 강조할 수 있습니다. 예를 들어, 특정 날짜 범위에 대한 강조나, 특정 값 이상을 시각적으로 구분할 수 있습니다.

데이터 강조 예제

import plotly.express as px

# 샘플 데이터 생성
df = px.data.gapminder().query("continent == 'Oceania'")

# 기본 선 그래프 생성
fig = px.line(df, x='year', y='pop', color='country')

# 특정 날짜 범위 강조
fig.add_shape(
    type='rect',
    x0=1970, x1=1975,
    y0=2000000, y1=15000000,
    line=dict(color='red', width=3, dash='dash'),
    fillcolor='LightSalmon',
    opacity=0.2
)

fig.show()

6. 결론

Plotly에서 도형을 추가하면 데이터 시각화의 효과를 극대화하고, 데이터의 중요한 부분을 강조할 수 있습니다.

add_shape 메서드를 활용하여 직선, 사각형, 원(타원) 등의 도형을 추가할 수 있으며, 도형의 스타일과 레이아웃을 조정하여 그래프를 보다 명확하게 표현할 수 있습니다.

이 기능을 통해 데이터의 특정 부분을 시각적으로 강조하고, 분석의 인사이트를 더욱 명확히 전달할 수 있습니다.