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

plotly의 데이터 값(라벨)의 표시 - easylabel

by 아참형인간 2022. 4. 24.
easylabel.knit

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

R이든 python이든 어떤 툴을 사용해서 데이터 분석을 시작할 때는 대부분 데이터를 살펴보는 일부터 시작한다. 데이터에 대한 기술통계를 구해서 NA값이라든지 전체 분포를 살펴보고 연관이 있어 보이는 변수에 대해 산점도를 그려서 데이터의 전체적인 분포를 살펴보기 마련이다.

산점도를 그려서 데이터를 확인할 때 가장 애매한 것이 분석자가 관심있는 데이터가 어디에 위치하는지 알아보는 것이다. 물론 이를 위해 색을 달리 처리한다든지 모양을 달리 처리한다든지 할 수 있겠지만 관심있는 데이터가 많으면 색이나 모양과 데이터를 매칭한다는 것도 헤깔리는 일임에 틀림없다. 이런 경우 해당 데이터에 라벨을 표시해주면 한눈에 알아보기 쉽지만 데이터가 겹치면 또 알아보기 힘들다.

ggpplot2에서는 ggrepel 패키지에서 제공하는 geom_text_repel()geom_label_repel()을 사용하면 겹치지 않게 텍스트나 라벨을 붙여줄 수 있다. 그렇다면 plotly에서 산점도에서 겹치지 않도록 라벨을 붙여주는 방법을 알아보자.

plotly로 그려진 시각화에서도 겹치지 않는 라벨을 위한 패키지가 제공되는데 easylabel을 사용한다.

install.packages('easylabel')
library(easylabel)

easylabel패키지에서 제공하는 라벨을 그리는 함수는 easylabel()이다. easylabel()은 shiny와 plotly 기반의 시각화로 산점도를 보여준다. 여기서 하나 주의해야 하는 것은 plotly에서 변수 매핑에 ~를 사용했지만 easylabel()에서는 따옴표를 사용해 준다는 것이다. 또 기본적으로 사용하는 라벨 텍스트는 데이터프레임의 ’rowname’을 사용하는데 만약 ’rowname’이 설정되지 않았다면 labs 매개변수로 설정해주어야 한다.

column_to_rownames(df_covid19_stat, var = 'location') |>
  easylabel::easylabel(x = '십만명당사망자수', y = '백신접종완료률')

df_covid19_stat |> 
  easylabel::easylabel(x = '십만명당사망자수', y = '백신접종완료률',
                       labs = 'location')

위의 코드를 실행시키면 아래와 같은 shiny app이 실행이 된다.

여러가지 기능에 대한 버튼들이 있는데 정작 라벨 이름이 표시되어 있지 않다. 라벨 이름을 표시하기 위해서는 산점도의 점을 클릭하면 해당 점에 해당하는 라벨이 표시되고 표시된 라벨을 드래그하면 라벨의 위치를 조절할 수 있다.

만약 shiny app을 실행하지 않고 plotly 객체로 시각화하려면 output_shiny = FALSE를 매개변수로 사용한다. 다만 이 경우는 shiny app처럼 마우스 클릭으로 라벨이 추가되지 않는다. 따라서 이 경우는 startLabels 매개변수에 표시되어야 할 데이터 레벨을 벡터로 전달해 줌으로써 표시할 수 있다.

아래의 plotly에서도 라벨을 원하는 위치로 옮겨볼 수 있다.

df_covid19_stat |> 
  easylabel::easylabel(x = '십만명당사망자수', y = '백신접종완료률',
                       labs = 'location',
                       startLabels = pull(df_covid19_stat[df_covid19_stat$location %in% c('South Korea', 'United Kingdom', 'France', 'United States'), 'location']),
                       output_shiny = FALSE)

댓글