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

plotly란?

by 아참형인간 2022. 4. 16.
ggplotly1.knit

plotly란?

plotly는 오픈 소스인 JavaScript로 구현된 plotly.js를 기반으로 R에서 생성한 데이터 시각화 객체를 Javascript로 생성해주는 패키지이다1. plotly는 JavaScript로 구현되기 때문에 plotly 객체는 결국 HTML 코드로 구현되고 이 코드는 웹브라우저 상에서 작동함으로써 사용자의 반응에 따른 데이터의 표현이 가능하다.

plotly를 통해 생성된 데이터 시각화의 HTML은 R에서 JavaScript를 사용할 수 있게하는 htmlwidgets 프레임워크에서 동작하기 할 수 있어 HTML자체로 사용할 수도 있고 R Markdown이나 Shiny App, R-Studio, Jupiter Notebook 등에서 자유롭게 사용이 가능하다.

R의 plotly패키지는 동적 시각화를 제공하면서 출판이 가능한 품질의 시각화를 만든다. plotly로 선 그래프, 산점도, 막대 차트, 박스 플롯, 히스토그램, 히트맵, 서브플롯, 다중 축 및 3D(WebGL 기반) 차트 등의 다양한 시각화를 생성할 수 있는데 생성할 수 있는 시각화의 종류는 ggplot2보다 많다. plotly는 R에서 무료로 사용 가능한 패키지로 python, julia, F#, MATLAB 등에서도 지원되는 그래픽 라이브러리를 제공하고 있다.

plotly의 내부 표현 구조

R 내부에서 plotly 객체는 plotly.js에서 정의된 JSON 스키마로 저장된다. 이 스키마는 트리 형태로 구성되어 있는데 각 노드는 속성(attribute)로 불리는 값을 가지게 되고 이들 속성들이 모여서 전체 그림(Figure)를 구성한다. 예를 들어 fig |> layout(width = 20)이라는 코드는 ‘layout’ 루트 노드에 하위 노드인 ‘width’ 속성을 20으로 설정하게 된다. 이 속성값은 plotly의 함수(add_trace(), layout() 등)를 사용하여 노드의 값을 설정하거나 직접 노드의 속성 값을 설정할 수 있다. 예를 들어 앞의 fig |> layout(width = 20)의 경우 fig.layout.width = 20으로 설정할 수 있다. plotly 객체를 생성하기 위해서는 많은 노드의 속성 값이 필요하지만 사용자가 직접 설정하지 않은 속성 값은 기본값으로 설정되거나 plotly가 내부적으로 계산하여 속성 값들이 설정되게 된다.

R에서 plotly 객체를 표현하는데 사용되는 트리의 첫번째 레벨 노드는 ‘data’, ‘layout’, ’frame’의 세 가지가 있다.

‘data’ 노드

plotly 스키마에서 사용하는 트리 중 첫 번째 레벨 노드인 ‘data’ 노드는 뒤에서 설명할 ’trace’에 관련한 속성 노드들이 하위 노드로 구성되는데 ’trace’로 설정되는 문자열로 설정되고 해당 ’trace’에 관련된 속성의 이름과 값들로 구성된 리스트로 표현된다.

plotly에서의 ’trace’는 스캐터, 선, 박스 등 약 40개 이상의 type이 제공되고 각각의 ’trace’는 데이터를 표현하는 도형적 요소들을 결정한다. 이 ’trace’는 type 속성으로 설정할 수 있고 trace의 종류에 따라 속성 값을 표현하는 노드들을 list()를 사용하여 리스트로 만들어 설정한다.

각각의 trace는 그 trace 도형 타입과 관련된 하나의 subplot에 표현되고, 파이 trace를 제외한 모든 trace는 단일 범례 요소(Single Legend Entry)를 가진다. 하지만 trace의 종류에 따라 설정 가능한 속성이 달라지기 때문에 각각의 trace마다 설정할 수 있는 속성들을 잘 파악할 필요가 있다.

‘layout’ 노드

‘layout’ 노드는 데이터와 관련되지 않는 속성들을 정의하는 노드로써 list()를 사용하여 하위 속성들을 리스트로 만들어 설정해야 한다.

데이터와 관련되지 않는 ‘layout’ 노드에서 설정할 수 있는 속성 값은 플롯 여백, 플롯 제목, 플롯 축 제목, 주석, 도형 등과 관련된 값이다.

‘frame’ 노드

마지막 첫 레벨 노드는 ‘frame’ 노드이다. 이 ‘frame’ 노드는 plotly의 애니메이션 기능과 관련된 속성 값을 설정하는 노드이다.

'Plotly in R - 그래프에 마우스를 올려봅시다' 카테고리의 다른 글

plot_ly()  (0) 2022.04.16
plotly 예제 데이터  (0) 2022.04.16
ggplotly  (0) 2022.04.16
동적 인터랙티브 시각화 패키지  (0) 2022.04.16
R의 Plotly 사용법을 시작합니다  (0) 2022.04.16

댓글