R에서 가장 많이 사용되는 시각화 패키지는 "ggplot2"이다.
하지만 정적 그래프로 사용자가 데이터를 탐색할 때보다는 이미 연구된 발표자료, 통계자료에 많이 사용된다.
때문에, 사용자 반응형 그래프를 제공하는 "plotly" 패키지가 더 유용할 때가 있다.
plotly는 인터랙티브 그래프로 사용자가 "hover"를 통해서 데이터 값을 실시간으로 확인할 수 있고,
사용자가 관심 있는 시간, 범주만을 확대하여 볼 수도 있다.
또한 HTML 포맷으로 저장하여 포스팅하면 일반 사용자들도 웹 브라우저를 이용해 그래프를 조작할 수 있다.
이번 포스팅에서는 plotly 패키지를 사용해 막대그래프를 시각화해 볼 것이다.
그래프를 직접 조작해보려면 html 파일을 봐주세요~!
00. 주요 Arguments
plot_ly(
data = data.frame(),
...,
type = "bar",
name,
color,
colors = NULL,
alpha = NULL,
stroke,
strokes = NULL,
alpha_stroke = 1,
size,
sizes = c(10, 100),
span,
spans = c(1, 20),
symbol,
symbols = NULL,
linetype,
linetypes = NULL,
split,
frame,
width = NULL,
height = NULL
)
plotly 패키지에서는 시각화 함수로 plot_ly()를 사용한다.
ggplot2 패키지는 기본 포맷에 '+'를 사용해서 그래프를 커스텀했다면,
plot_ly() 함수로 기본 포맷을 지정하고, dplyr 패키지의 '%>%' 체인 함수를 사용해 그래프에 요소를 추가할 수 있다.
01. 기본 bar charts
1) 간단한 데이터프레임 생성
animals<-c("giraffes","orangutans","monkeys")
SF_Zoo<-c(20,14,23)
LA_Zoo<-c(12,18,29)
data<-data.frame(animals,SF_Zoo, LA_Zoo)
2) bar chart 구현
plot_ly() 함수로 기본적인 막대그래프를 그릴 때는
① data = 데이터 셋, x = ~변수, y = ~변수
② type = 'bar'
①, ②을 지정해 주면 된다.
plot_ly(data, x=~animals, y=~SF_Zoo,
type = "bar", # 막대그래프
name ="SF zoo") # 그래프 제목
02. Grouped Bar Chart - 묶은 막대 그래프
ggplot2에서는 +geom_bar()를 사용해 막대그래프를 그리고,
묶은 막대 그래프를 시각화하기 위해서 position ="dodge" 옵션을 사용했다.
plotly는 plot_ly() 함수를 사용해 기본 막대 그래프를 그린 후
'%>%' 를 사용하여 add_trace()를 추가하여 dodge 막대 그래프를 그릴 수 있고,
layout() 함수안에 barmode를 설정해야 한다,
1) SF_Zoo, LA_Zoo에 따라 구별해 나란하게 표시, barmode='group'
plot_ly(data, x = ~animals, y = ~SF_Zoo, type = 'bar', name = 'SF Zoo') %>%
add_trace(y = ~LA_Zoo, name = 'LA Zoo') %>%
layout(yaxis = list(title = 'Count'), # y축 제목 지정
barmode = 'group')
03. Stacked Bar Chart - 누적 막대 그래프
위에서 묶은 막대 그래프를 시각화하기 위해서 barmode = 'group'으로 설정하였다.
누적 막대 그래프를 그리기 위해서는 barmode = 'stack'으로 설정하면 된다.
plot_ly(data, x=~animals, y=~SF_Zoo,type='bar', name='SF Zoo') %>%
add_trace(y=~LA_Zoo, name='LA Zoo') %>%
layout(yaxis=list(title='Count'),
barmode='stack') #누적막대그래프는 barmode를 'stack'으로 지정하면 됨.
04. Text 속성 - text, textposition, texttemplate, textfont
ggplot2에선 그래프에 값을 표시하기 위해서 geom_text() 함수를 사용하였다.
plotly에서는 plot_ly() trace에서 text 속성을 사용하면 된다. text 속성은 데이터로 표시되어야 하는 문자열을 매핑하거나 설정하는 속성이다.
text에 단일 문자열을 설정하면 모든 막대에 설정된 문자열이 표시되고 문자열 벡터가 설정되면 문자열 벡터의 순서에 따라 막대 위에 문자열이 표시된다.
1) 사용 데이터 : 크론병 데이터
df <- read.csv("https://vincentarelbundock.github.io/Rdatasets/csv/robustbase/CrohnD.csv")
data.1 <- df[-1]
# 성별로 table 생성
tb <- table(data.1$sex) %>% as.data.frame()
tb$prob <- tb$Freq/sum(tb$Freq) *100
# 기본 막대그래프 생성
plot_ly() %>%
add_trace(data = tb, x=~Var1, y=~Freq, type='bar', color=~Var1)
2) text 속성에 Freq 변수 지정하기
막대그래프에 text 속성을 표시하기 위해서는 plot_ly() 함수로 먼저 막대그래프를 지정한 후 '%>%'로 , add_text() 함수를 추가 해야한다.
plot_ly(data =tb, x=~Var1, y=~Freq, type='bar',
color=~Var1) %>% # 막대그래프 생성
add_text(x=~Var1, y=~Freq, text = ~Freq, # 막대그래프에 text 속성 추가
showlegend = F) %>% # text 범례 삭제
layout(title = "text 속성 추가",
xaxis = list(title=""),
yaxis = list(title="", range = list(0,120)),
margin = list(l=10, r=20, b=10, t=30, pad=0))
3) textposition : text 위치 설정
textposition은 ‘top’, ‘middle’, ‘bottom’ 등이 있다.
- top
plot_ly(data =tb, x=~Var1, y=~Freq, type='bar',
color=~Var1) %>% # 막대그래프 생성
add_text(x=~Var1, y=~Freq, text = ~Freq, # 막대그래프에 text 속성 추가
showlegend = F,
textposition = 'top') %>%
layout(title = "textposition = 'top'",
xaxis = list(title=""),
yaxis = list(title="", range = list(0,120)),
margin = list(l=10, r=20, b=10, t=30, pad=0))
- middle
plot_ly(data =tb, x=~Var1, y=~Freq, type='bar',
color=~Var1) %>% # 막대그래프 생성
add_text(x=~Var1, y=~Freq, text = ~Freq, # 막대그래프에 text 속성 추가
showlegend = F,
textposition = 'middle') %>%
layout(title = "textposition = 'middle'",
xaxis = list(title=""),
yaxis = list(title="", range = list(0,120)),
margin = list(l=10, r=20, b=10, t=30, pad=0))
- bottom
plot_ly(data =tb, x=~Var1, y=~Freq, type='bar',
color=~Var1) %>% # 막대그래프 생성
add_text(x=~Var1, y=~Freq, text = ~Freq, # 막대그래프에 text 속성 추가
showlegend = F,
textposition = 'bottom',
textfont=list(color=I('black'))) %>%
layout(title = "textposition = 'bottom'",
xaxis = list(title=""),
yaxis = list(title="", range = list(0,120)),
margin = list(l=10, r=20, b=10, t=30, pad=0))
4) textfont : text 폰트 설정
- textfont = list(color ="컬러코드") : 색상변경
plot_ly(data =tb, x=~Var1, y=~Freq, type='bar',
color=~Var1) %>% # 막대그래프 생성
add_text(x=~Var1, y=~Freq, text = ~Freq, # 막대그래프에 text 속성 추가
showlegend = F,
textposition = 'top',
textfont = list(color = 'red')) %>%
layout(title = "textposition = 'top'",
xaxis = list(title=""),
yaxis = list(title="", range = list(0,120)),
margin = list(l=10, r=20, b=10, t=30, pad=0))
- textfont = list(family="") : 글씨체 변경
plot_ly(data =tb, x=~Var1, y=~Freq, type='bar',
color=~Var1) %>% # 막대그래프 생성
add_text(x=~Var1, y=~Freq, text = ~Freq, # 막대그래프에 text 속성 추가
showlegend = F,
textposition = 'top',
textfont = list(color = 'red',
family ='nanumgothic')) %>%
layout(title = "textposition = 'top'",
xaxis = list(title=""),
yaxis = list(title="", range = list(0,120)),
margin = list(l=10, r=20, b=10, t=30, pad=0))
- textfont = list(size = 숫자) : 폰트 사이즈
plot_ly(data =tb, x=~Var1, y=~Freq, type='bar',
color=~Var1) %>% # 막대그래프 생성
add_text(x=~Var1, y=~Freq, text = ~Freq, # 막대그래프에 text 속성 추가
showlegend = F,
textposition = 'top',
textfont = list(color = 'red',
family ='nanumgothic',
size = 20)) %>%
layout(title = "textposition = 'top'",
xaxis = list(title=""),
yaxis = list(title="", range = list(0,120)),
margin = list(l=10, r=20, b=10, t=30, pad=0))
05. Hover 속성 - hovertext, hoverinfo, hovermode, hovertemplete
add_text()를 통해 그래프에 직접 데이터 값을 입력할 수 있지만,
표시할 데이터 정보가 많은 경우 plotly 패키지에서는 'Hover'라는 속성이 있다.
plot_ly() 하나의 trace인 기본 막대그래프를 생성하고,
막대그래프에 마우스를 갖다대면 "Hover" 말풍선을 통해 데이터의 정보를 볼 수 있다.
1) hovertext
hovertext를 통해 x, y 좌표에 표시되는 문자열을 설정할 수 있다.
단순 문자열을 설정하면 모든 데이터 호버에 동일한 문자열이 표기되지만,
벡터를 설정하면 각각의 호버에 매핑된 결과가 표시된다.
- 데이터는 ggplot2 패키지 데이터 셋인 'diamonds' 사용
tb2 <- table(diamonds$cut, diamonds$clarity) %>% as.data.frame()
names(tb2) <- c("cut", "clarity", "Freq")
plot_ly(tb2, x=~ cut, y=~ Freq, color = ~clarity, type='bar') %>%
layout(title = "",
xaxis = list(title=""),
yaxis = list(title=""),
margin = list(l=10, r=20, b=10, t=30, pad=0))
기본 hover는 (x, y)의 값 정보를 확인할 수 있다.
- hovertext를 clarity로 지정
plot_ly(tb2, x=~ cut, y=~ Freq, color = ~clarity, type='bar',
hovertext = ~ clarity) %>%
layout(title = "기본 hover",
xaxis = list(title=""),
yaxis = list(title=""),
margin = list(l=10, r=20, b=10, t=30, pad=0))
2) hoverinfo
hoverinfo를 통해 호버에 표시되는 데이터 정보를 설정할 수 있다.
hoverinfo 속성은 X, Y, Z축의 좌표를 표기하고,
이 외에도 , text(특정 문자열), name(trace name), none(제거), skip(생략)이 있고, 각각은 +를 사용하여 조합할 수 있다.
- hoverinfo = 'text' 로 지정하면 hovertext에서 지정한 문자열만 호버에 출력된다.
plot_ly(tb2, x=~ cut, y=~ Freq, color = ~clarity, type='bar',
hovertext = ~paste0("<Clarity> : " ,clarity, "<br>",
"<Cut> : ", cut, "<br>",
"<Count> :" ,Freq),
hoverinfo = 'text') %>%
layout(title = "기본 hover",
xaxis = list(title=""),
yaxis = list(title=""),
margin = list(l=10, r=20, b=10, t=30, pad=0))
3) hovermode
plotly에서는 크게 세 가지 방법의 호버모드가 지원되는데 ’layout’의 첫 레벨 속성으로 설정한다.
- hovermode ='closet' : 마우스에 가장 가까운 트레이스에 대한 호버를 표시하는 호버모드(default)
- hovermode ='x' or 'y' :X축, Y축으로 같은 값을 가지는 트레이스에 대한 호버를 모두 표시해주는 호버모드
-hovermode ='x unified' or 'y unified' : X축, Y축으로 같은 값을 가지는 각각의 트레이스에 호버를 표시
hovermode는 line 그래프 실습 때 확인해 볼 것이다.
참고 문헌(reference)
사용 데이터
참고 사이트
https://plotly.com/r/bar-charts/Bar
Over 14 examples of Bar Charts including changing color, size, log axes, and more in R.
plotly.com
https://2stndard.tistory.com/72
plotly trace의 공통 속성(Attribute) - hovertext, hoverinfo, hovermode, hovertemplete
trace의 공통 속성(Attribute) - hover 관련 속성(마우스를 올려봅시다) 사용데이터 : https://2stndard.tistory.com/68 hovertext, hoverinfo, hovermode, hovertemplete plotly와 같은 동적 시각화에서는 대부분 마우스 포인터
2stndard.tistory.com
'R > plotly' 카테고리의 다른 글
R | plotly | Line Plot - 선 그래프 (1) | 2023.02.02 |
---|---|
R | plotly | Bubble Chart - 버블 차트 (0) | 2023.02.01 |
R | plotly | Scatter Plot - 산점도 (0) | 2023.02.01 |
R | plotly | Violin Plot - 바이올린 플롯 (0) | 2023.01.31 |
R | plotly | box plot (0) | 2023.01.31 |