Hover 기능 사용하기

Author

Gabriel Yang


Plotly는 대화형 데이터 시각화를 위해 강력한 기능들을 제공하는 라이브러리입니다. 그중에서도 hover 기능은 데이터 포인트에 마우스를 가져다 댔을 때 추가적인 정보를 제공할 수 있어 매우 유용합니다.

여기서는 Plotly의 hover 기능을 사용하여, 다른 데이터셋을 활용한 몇 가지 예시를 만들어보겠습니다. Gapminder 데이터셋을 사용하여 세계 각국의 경제 및 인구 통계 정보를 시각화하는 예시를 보여드리겠습니다.

1. Gapminder 데이터셋을 사용한 기본 Hover 기능 예시

먼저, Gapminder 데이터셋을 사용하여 기본적인 산점도를 생성하고, 기본 hover 기능을 확인해보겠습니다.

import plotly.express as px

# Gapminder 데이터셋 로드
df = px.data.gapminder()

# 기본적인 산점도 생성
fig = px.scatter(df[df['year'] == 2007],
                 x="gdpPercap",
                 y="lifeExp",
                 size="pop",
                 color="continent",
                 hover_name="country",
                 log_x=True,
                 size_max=60)

# 그래프 표시
fig.show()

이 코드는 2007년 데이터를 사용하여, 각 나라의 1인당 GDP(gdpPercap)와 기대 수명(lifeExp)을 산점도로 표현합니다. 각 점의 크기는 인구(pop)를 나타내며, 색상은 대륙(continent)에 따라 다릅니다. 기본적으로 각 나라의 이름(country)이 hover 시 나타납니다.

2. Hover 데이터 커스터마이징 예시

이번에는 hover_data 매개변수를 사용하여 추가 정보를 hover 시 나타내 보겠습니다. 예를 들어, 기대 수명(lifeExp)과 인구(pop) 정보도 함께 표시하도록 설정합니다.

# Hover 데이터 커스터마이징
fig = px.scatter(df[df['year'] == 2007],
                 x="gdpPercap",
                 y="lifeExp",
                 size="pop",
                 color="continent",
                 hover_name="country",
                 hover_data=["pop", "lifeExp"],
                 log_x=True,
                 size_max=60)

# 그래프 표시
fig.show()

이제 각 데이터 포인트에 마우스를 가져다 대면 해당 국가의 이름, 인구, 기대 수명 등의 정보가 함께 표시됩니다.

3. Hover 템플릿 커스터마이징 예시

hovertemplate을 사용하여 더욱 구체적인 정보를 원하는 형식으로 커스터마이징할 수 있습니다.

# Hover 템플릿 커스터마이징
fig = px.scatter(df[df['year'] == 2007],
                 x="gdpPercap",
                 y="lifeExp",
                 size="pop",
                 color="continent",
                 hover_name="country",
                 log_x=True,
                 size_max=60)

# 템플릿 설정
fig.update_traces(hovertemplate=(
    "<b>%{hovertext}</b><br><br>" +
    "GDP per Capita: %{x:$,.0f}<br>" +
    "Life Expectancy: %{y:.1f} years<br>" +
    "Population: %{marker.size:,} people"
))

# 그래프 표시
fig.show()

이 코드는 hovertemplate을 사용하여 hover 정보의 형식을 더욱 상세히 지정했습니다. 예를 들어, 1인당 GDP는 달러 형식으로, 기대 수명은 소수점 한 자리까지, 인구는 천 단위 구분 기호를 사용해 표시되도록 설정했습니다.

4. 막대 그래프에서 Hover 기능 활용하기

이번에는 막대 그래프에서 hover 기능을 활용해 보겠습니다. 이 예시에서는 각 대륙의 총 인구를 보여줍니다.

# 막대 그래프 생성
df_2007 = df[df['year'] == 2007]
df_grouped = df_2007.groupby('continent').agg({'pop':'sum'})
df_grouped = df_grouped.reset_index()
# df_grouped

fig = px.bar(df_grouped,
             x="continent",
             y="pop",
             color="continent",
             hover_name="continent",
             hover_data={"pop": ":,"},  # 인구를 천 단위 구분으로 표시
             title="2007년 대륙별 총 인구")

# 그래프 표시
fig.show()

이 그래프에서 각 대륙의 막대 위에 마우스를 올리면, 해당 대륙의 총 인구가 천 단위 구분 기호와 함께 표시됩니다.

5. 히트맵에서 Hover 기능 활용하기

마지막으로, 히트맵을 사용하여 다양한 값에 대해 hover 기능을 설정하는 방법을 살펴보겠습니다.

import plotly.graph_objects as go

# 예시 데이터
z = [[1.1, 0.8, 0.7], [0.5, 0.6, 0.9], [0.9, 0.7, 0.6]]
x = ['Monday', 'Tuesday', 'Wednesday']
y = ['Morning', 'Afternoon', 'Evening']

# 히트맵 생성
fig = go.Figure(data=go.Heatmap(
                   z=z,
                   x=x,
                   y=y,
                   colorscale='Viridis'))

# Hover 템플릿 커스터마이징
fig.update_traces(hovertemplate=(
    "Day: %{x}<br>" +
    "Time: %{y}<br>" +
    "Value: %{z:.2f}"
))

# 그래프 표시
fig.show()

이 히트맵에서는 요일과 시간대에 따른 값을 표시합니다. hovertemplate을 사용하여, 각 셀에 마우스를 올리면 요일, 시간대, 그리고 해당 값이 소수점 두 자리까지 표시됩니다.

결론

Plotly의 hover 기능은 다양한 그래프 유형에서 강력하게 활용될 수 있습니다. 데이터 포인트에 대한 추가 정보를 제공하고, 시각화를 보다 직관적으로 만들어줍니다.