Link hướng dẫn về plotly: https://cran.r-project.org/web/packages/plotly/plotly.pdf
plot_ly(data, x, y, color, colors, mode, type, text, size, …)
data: Dữ liệu trục sử dụng để visualize.
x: Trục x.
y: Trục y.
color: Màu sắc được chia theo nhóm biến nào.
colors: Giá trị hex của màu sắc theo nhóm.
mode: Kiểu đồ thị là gì gồm: barchart, scatter, cicle, line, …
type: Loại đồ thị biểu diễn là gì: Marker, line, barchart,…
size: Kích thước hiển thị từng từng điểm.
text: Giá trị text hiện thị khi hover chuột lên đồ thị.
library(dplyr)
## Warning: package 'dplyr' was built under R version 3.5.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyr)
library(plotly)
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 3.5.3
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
data <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv")
data_2017 <- data[which(data$year == 2007),]
data_2017$size <- sqrt(data_2017$pop)
plot_ly(data_2017, x = ~gdpPercap, y = ~lifeExp, type = 'scatter',
mode = 'markers',
marker = list(symbol = 'circle', sizemode = 'diameter',
line = list(width = 2, color = '#FFFFFF')),
size = ~size, color = ~continent,
text = ~paste0('Country:', country, '<br>Life Expectancy:', lifeExp, '<br>GDP:', gdpPercap,
'<br>Pop.:', pop)) %>%
layout(title = 'Life Expectancy v. Per Capita GDP, 2007',
xaxis = list(title = 'GDP per capital (2000 dolars)',
gridColor = 'white',
zerolinewidth = 1,
ticklen = 5,
gridwidth = 2),
yaxis = list(title = 'Life Expectancy (years)',
gridColor = 'white',
zerolinewidth = 1,
ticklen = 5,
gridwidth = 2),
paper_bgcolor = 'rbg(243,243,243)',
plot_bgcolor = 'rbg(243,243,243)')
## Warning: `line.width` does not currently support multiple values.
## Warning: `line.width` does not currently support multiple values.
## Warning: `line.width` does not currently support multiple values.
## Warning: `line.width` does not currently support multiple values.
## Warning: `line.width` does not currently support multiple values.
#We also can change color for buble
plot_ly(data_2017, x = ~gdpPercap, y = ~lifeExp, type = 'scatter',
mode = 'markers',
marker = list(symbol = 'circle', sizemode = 'diameter',
line = list(width = 2, color = '#FFFFFF')),
size = ~size, color = ~continent,
colors = c('red','blue','yellow','green','grey'),
text = ~paste0('Country:', country, '<br>Life Expectancy:', lifeExp, '<br>GDP:', gdpPercap,
'<br>Pop.:', pop)) %>%
layout(title = 'Life Expectancy v. Per Capita GDP, 2007',
xaxis = list(title = 'GDP per capital (2000 dolars)',
gridColor = 'white',
zerolinewidth = 1,
ticklen = 5,
gridwidth = 2),
yaxis = list(title = 'Life Expectancy (years)',
gridColor = 'white',
zerolinewidth = 1,
ticklen = 5,
gridwidth = 2),
paper_bgcolor = 'rbg(243,243,243)',
plot_bgcolor = 'rbg(243,243,243)')
## Warning: `line.width` does not currently support multiple values.
## Warning: `line.width` does not currently support multiple values.
## Warning: `line.width` does not currently support multiple values.
## Warning: `line.width` does not currently support multiple values.
## Warning: `line.width` does not currently support multiple values.
Chúng ta chỉ cần thay đổi type từ ‘scatter’ thành ‘bar’ và sử dụng add_trace() để tạo add thêm cột mới. Có thể chuyển từ dạng group theo nhóm thành stack bằng cách khai báo ở argument barmode trong layout từ ‘group’ thành ‘stack’.
library(dplyr)
library(tidyr)
pop <- data %>% filter(country %in% c('Vietnam','Philippines')) %>%
select(year, country, pop) %>%
spread(key = country, value = pop)
pop$year <- as.character(pop$year)
#Visualize population in group graph
pop %>% plot_ly(x = ~ year, y = ~ Vietnam, type = 'bar', name = 'Vietnam') %>%
add_trace(y = ~ Philippines, name = 'Philippines') %>%
layout(title = 'Population Viet Nam & Philippines',
yaxis = list(title = 'Population'),
barmode = 'group',
paper_bgcolor = 'rbg(243,243,243)',
plot_bgcolor = 'rbg(243,243,243)')
#Stack graph
pop %>% plot_ly(x = ~ year, y = ~ Vietnam, type = 'bar', name = 'Vietnam') %>%
add_trace(y = ~ Philippines, name = 'Philippines') %>%
layout(title = 'Population Viet Nam & Philippines',
yaxis = list(title = 'Population'),
barmode = 'stack',
paper_bgcolor = 'rbg(243,243,243)',
plot_bgcolor = 'rbg(243,243,243)')
#Add boundary line
pop %>% plot_ly(x = ~ year, y = ~ Vietnam, type = 'bar', name = 'Vietnam',
marker = list(color = 'rbg(243,43,100,0.7)',
line = list(color = 'rgb(8,48,107)',
width = 1.5)
)) %>%
add_trace(y = ~ Philippines, name = 'Philippines',
marker = list(color = 'rgb(158,202,225,0.7)',
line = list(color = 'rgb(8,48,107)',
width = 1.5)
)) %>%
layout(title = 'Population Viet Nam & Philippines',
yaxis = list(title = 'Population'),
barmode = 'group',
paper_bgcolor = 'rbg(200,200,200)',
plot_bgcolor = 'rbg(200,200,200)')
#Draw normal scatter point.
(p <- plot_ly(iris, x = ~ Sepal.Length, y = ~ Petal.Length,
marker = list(size = 10,
color = 'rgba(255, 183, 193, 0.9)',
line = list(color = 'rgba(152, 0, 0, 0.8)',
width = 2)
)))
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plot.ly/r/reference/#scatter
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
trace_0 <- rnorm(100,5)
trace_1 <- rnorm(100,0)
trace_2 <- rnorm(100,-5)
x <- c(1:100)
data <- data.frame(x, trace_0, trace_1, trace_2)
#Draw multiple lines and markers in same plot.
(p <- plot_ly(data, x = ~ x, y = ~ trace_0, type = 'scatter', mode = 'lines') %>%
add_trace(y = ~ trace_1, mode = 'markers+lines') %>%
add_trace(y = ~ trace_2, mode = 'markers',
marker = list(color = 'red')))
#Classify point in group
(p <- plot_ly(iris, x = ~ Sepal.Length, y = ~ Petal.Length, color = ~ Species))
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plot.ly/r/reference/#scatter
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
#Change the marker
(p <- plot_ly(iris, x = ~ Sepal.Length, y = ~ Petal.Length, symbol = ~ Species, symbols = c('circle','x','o'),
marker = list(size = 10, line = list(color = 'white', width = 2))))
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plot.ly/r/reference/#scatter
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
#Add line regression in point
fit <- lm(data = iris, Petal.Length ~ Sepal.Length)
(p <- plot_ly(iris, x = ~ Sepal.Length) %>%
add_markers(y = ~ Petal.Length) %>%
add_lines(x = ~ Sepal.Length, y = fitted(fit)))
#Add polygon quadratic regression in point
fit <- lm(data = iris, Petal.Length ~ poly(Sepal.Length,2))
(p <- plot_ly(iris, x = ~ Sepal.Length) %>%
add_markers(y = ~ Petal.Length) %>%
add_lines(x = ~ Sepal.Length, y = fitted(fit)))
#Add polygon third degree regression in point
fit <- lm(data = iris, Petal.Length ~ poly(Sepal.Length,3))
(p <- plot_ly(iris, x = ~ Sepal.Length) %>%
add_markers(y = ~ Petal.Length) %>%
add_lines(x = ~ Sepal.Length, y = fitted(fit)))