본문 바로가기
  • plotly로 바로쓰는 동적시각화 in R & 파이썬
Plotly in R - 그래프에 마우스를 올려봅시다

plotly의 hovermode 설정 in R

by 아참형인간 2022. 11. 26.
hovermode.knit

사용데이터 : https://2stndard.tistory.com/68

호버모드(hovermode)

plotly와 같은 동적 시각화에서는 사용자의 반응에 따라 해당 시각화에서 다양한 정보를 표시해준다는 장점이 있다. plotly에서는 사용자의 마우스 반응에 따라 데이터가 표시되는 박스가 나타나는데 이를 ’hover’라고 한다. ’hover’는 plotly에서만 사용하는 개념은 아니고 HTML의 디자인적 요소를 정의하는 CSS(Cascading Style Sheet)에서 지원하는 개념으로 plotly에서도 이를 준용하여 사용한다.

plotly에서는 호버를 설정하기 위해 다양한 속성을 제공하는데 이번 포스트에서는 마우스에 따라 나타나는 호버 레이블이 나타나는 트레이스의 범위를 설정할 수 있다. plotly에서는 크게 세 가지 방법의 호버모드가 지원되는데 ’layout’의 첫 레벨 속성으로 설정한다.

closet

‘closet’ 호버모드는 마우스에 가장 가까운 트레이스에 대한 호버를 표시하는 호버모드이다. plotly의 디폴트 호버모드로 ‘hovermode’의 별다른 설정이 없다면 ’closet’ 모드로 설정된다. ‘hovermode’속성은 ’layout’ 속성의 첫 번쨰 레벨 속성이기 때문에 layout()에 바로 ‘hovermode’ 속성을 설정한다. ‘closet’ 호버모드에서 가장 가까운의 범위는 ’hoverdistance’로 설정할 수 있는데 ’hoverdistance’는 -1이상의 정수로 설정할 수 있고 기본값은 20이다.

total_deaths_5_nations_by_day <- df_covid19 |> 
  filter((iso_code %in% c('KOR', 'USA', 'JPN', 'GBR', 'FRA'))) |>
  filter(!is.na(total_deaths_per_million))

total_deaths_5_nations_by_day |>
  ## plotly 객체 생성
  plot_ly() |>
  add_trace(type = 'scatter', mode = 'lines', 
            x = ~date, y = ~total_deaths_per_million , linetype = ~location, connectgaps = T) |>
  layout(title = '코로나 19 사망자수 추세', 
         xaxis = list(title = ''), 
         yaxis = list(title = '10만명당 사망자수 누계'), 
         margin = margins, 
         hovermode = 'closet', 
         hoverdistance = 5)

x, y

‘x’, ‘y’ 호버 모드는 X축, Y축으로 같은 값을 가지는 트레이스에 대한 호버를 모두 표시해주는 호버모드이다. 마우스 포인트가 가리키는 X축과 Y축의 값을 인식하고 이들과 동일한 값을 가지는 트레이스의 해당 위치에 각각의 호버가 표시된다. 또 하나 추가적으로 표시되는 정보는 ’x, ’y’값에 따른 각각의 축의 데이터이다. ’x’로 설정되면 X축에 해당하는 데이터가 X축에 표시되고 ’y’로 설정되면 Y축에 해당하는 데이터가 Y축에 표시된다. 이 모드는 각각의 동일한 축 데이터끼리 서로 비교할 수 있다는 장점이 있다. 이 모드는 plotly 시각화의 우측 상단에 표시되는 ’modebar’에서도 설정할 수 있다.

total_deaths_5_nations_by_day |>
  ## plotly 객체 생성
  plot_ly() |>
  add_trace(type = 'scatter', mode = 'lines', 
            x = ~date, y = ~total_deaths_per_million , linetype = ~location, connectgaps = T) |>
  layout(title = '코로나 19 사망자수 추세', 
         xaxis = list(title = ''), 
         yaxis = list(title = '10만명당 사망자수 누계'), 
         margin = margins, 
         hovermode = 'x', 
         hoverdistance = 5)

x unified, y unified

‘x’, ‘y’ 호버 모드는 X축, Y축으로 같은 값을 가지는 각각의 트레이스에 호버를 표시해 준다. 각각의 X, Y 값에 따라 트레이스들을 비교하기 위해 사용하지만 서로 각각의 호버에 표현되기 때문에 한눈에 수치를 비교하기가 어렵다는 단점이 있다. ‘x unified’, ‘y unified’는 동일한 X축과 Y축의 값에 해당하는 각각의 트레이스 데이터들이 하나으 호버 박스에 표시된다. 또 하나의 장점은 X축, Y 축의 방향으로 보조선이 표시된다는 것이다. 이 보조선은 ’sparkline’이라고 하는 속성으로 표시할 수도 있는데 호버 모드에서 ’x unified’, ’y unified’는 자동적으로 표시되어 보다 수월하게 데이터를 확인할 수 있다.

total_deaths_5_nations_by_day |>
  ## plotly 객체 생성
  plot_ly() |>
  add_trace(type = 'scatter', mode = 'lines', 
            x = ~date, y = ~total_deaths_per_million , linetype = ~location, connectgaps = T) |>
  layout(title = '코로나 19 사망자수 추세', 
         xaxis = list(title = ''), 
         yaxis = list(title = '10만명당 사망자수 누계'), 
         margin = margins, 
         hovermode = 'x unified', 
         hoverdistance = 5)

댓글