# load the plotly
library (plotly)
## Warning: package 'plotly' was built under R version 4.3.3
## Loading required package: ggplot2
##
## 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
# load the diamonds dataset from the ggplot2 package
data(diamonds, package="ggplot2")
diamonds
## # A tibble: 53,940 × 10
## carat cut color clarity depth table price x y z
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
## 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
## 4 0.29 Premium I VS2 62.4 58 334 4.2 4.23 2.63
## 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
## 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
## 7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47
## 8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53
## 9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49
## 10 0.23 Very Good H VS1 59.4 61 338 4 4.05 2.39
## # ℹ 53,930 more rows
subplot(
plot_ly(mpg,x= ~cty, y= ~hwy, name="default"),
plot_ly(mpg,x= ~cty, y= ~hwy) %>%
add_markers(alpha =0.2, name="alpha")
)
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
Figure 3.5: Combating overplotting in a scatterplot with alpha blending.
p <- plot_ly(mpg, x= ~cty, y= ~hwy, alpha = 0.5)
subplot (
add_markers(p, color = ~cyl, showlegend = FALSE) %>%
colorbar(title = "Viridis"),
add_markers(p, color = ~factor(cyl))
)
Figure 3.6: Variations on a numeric color mapping.
col1 <- c("#132B43","#56B1F7")
col2 <- viridisLite::inferno(10)
col3 <- colorRamp(c("red", "white","blue"))
subplot(
add_markers(p, color = ~cyl, colors = col1) %>%
colorbar(title = "ggplot2 default"),
add_markers(p, color = ~cyl, colors = col2) %>%
colorbar(title = "Inferno"),
add_markers(p, color = ~cyl, colors = col3) %>%
colorbar(title= "colorRamp")
) %>% hide_legend()
Figure 3.7: Three variations on a numeric color mapping.
col1<- "Accent"
col2<- colorRamp(c("red","blue"))
col3<- c(`4` = "red",`5` = "black", `6` = "blue", `8` = "green" )
subplot (
add_markers(p, color = ~factor(cyl), colors = col1),
add_markers(p, color = ~factor(cyl), colors = col2),
add_markers(p, color = ~factor(cyl), colors = col3)
) %>% hide_legend()
Figure 3.8: Three variations on a discrete color mapping.
add_markers(p, color= I("black"))
Figure 3.9: Setting a fixed color directly using I().
p <- plot_ly(mpg, x= ~cty, y= ~hwy, alpha = 0.3)
subplot (
add_markers(p, symbol = ~cyl, name = "A single trace"),
add_markers(p, symbol = ~factor(cyl), color= I("black"))
)
Figure 3.10: Mapping symbol to a numeric variable (left panel) and a factor (right panel).
subplot(
add_markers(p, symbol = ~cyl, symbols = c(17,18,19)),
add_markers(
p, colors = I("black"),
symbol = ~factor(cyl),
symbols = c("triangule-up", "diamond", "circle")
)
)
## Warning: The following are not valid symbol codes:
## 'triangule-up'
## Valid symbols include:
## '0', '0', 'circle', '100', '100', 'circle-open', '200', '200', 'circle-dot', '300', '300', 'circle-open-dot', '1', '1', 'square', '101', '101', 'square-open', '201', '201', 'square-dot', '301', '301', 'square-open-dot', '2', '2', 'diamond', '102', '102', 'diamond-open', '202', '202', 'diamond-dot', '302', '302', 'diamond-open-dot', '3', '3', 'cross', '103', '103', 'cross-open', '203', '203', 'cross-dot', '303', '303', 'cross-open-dot', '4', '4', 'x', '104', '104', 'x-open', '204', '204', 'x-dot', '304', '304', 'x-open-dot', '5', '5', 'triangle-up', '105', '105', 'triangle-up-open', '205', '205', 'triangle-up-dot', '305', '305', 'triangle-up-open-dot', '6', '6', 'triangle-down', '106', '106', 'triangle-down-open', '206', '206', 'triangle-down-dot', '306', '306', 'triangle-down-open-dot', '7', '7', 'triangle-left', '107', '107', 'triangle-left-open', '207', '207', 'triangle-left-dot', '307', '307', 'triangle-left-open-dot', '8', '8', 'triangle-right', '108', '108', 'triangle-right-open', '208', '208', 'triangle-right-dot', '308', '308', 'triangle-right-open-dot', '9', '9', 'triangle-ne', '109', '109', 'triangle-ne-open', '209', '209', 'triangle-ne-dot', '309', '309', 'triangle-ne-open-dot', '10', '10', 'triangle-se', '110', '110', 'triangle-se-open', '210', '210', 'triangle-se-dot', '310', '310', 'triangle-se-open-dot', '11', '11', 'triangle-sw', '111', '111', 'triangle-sw-open', '211', '211', 'triangle-sw-dot', '311', '311', 'triangle-sw-open-dot', '12', '12', 'triangle-nw', '112', '112', 'triangle-nw-open', '212', '212', 'triangle-nw-dot', '312', '312', 'triangle-nw-open-dot', '13', '13', 'pentagon', '113', '113', 'pentagon-open', '213', '213', 'pentagon-dot', '313', '313', 'pentagon-open-dot', '14', '14', 'hexagon', '114', '114', 'hexagon-open', '214', '214', 'hexagon-dot', '314', '314', 'hexagon-open-dot', '15', '15', 'hexagon2', '115', '115', 'hexagon2-open', '215', '215', 'hexagon2-dot', '315', '315', 'hexagon2-open-dot', '16', '16', 'octagon', '116', '116', 'octagon-open', '216', '216', 'octagon-dot', '316', '316', 'octagon-open-dot', '17', '17', 'star', '117', '117', 'star-open', '217', '217', 'star-dot', '317', '317', 'star-open-dot', '18', '18', 'hexagram', '118', '118', 'hexagram-open', '218', '218', 'hexagram-dot', '318', '318', 'hexagram-open-dot', '19', '19', 'star-triangle-up', '119', '119', 'star-triangle-up-open', '219', '219', 'star-triangle-up-dot', '319', '319', 'star-triangle-up-open-dot', '20', '20', 'star-triangle-down', '120', '120', 'star-triangle-down-open', '220', '220', 'star-triangle-down-dot', '320', '320', 'star-triangle-down-open-dot', '21', '21', 'star-square', '121', '121', 'star-square-open', '221', '221', 'star-square-dot', '321', '321', 'star-square-open-dot', '22', '22', 'star-diamond', '122', '122', 'star-diamond-open', '222', '222', 'star-diamond-dot', '322', '322', 'star-diamond-open-dot', '23', '23', 'diamond-tall', '123', '123', 'diamond-tall-open', '223', '223', 'diamond-tall-dot', '323', '323', 'diamond-tall-open-dot', '24', '24', 'diamond-wide', '124', '124', 'diamond-wide-open', '224', '224', 'diamond-wide-dot', '324', '324', 'diamond-wide-open-dot', '25', '25', 'hourglass', '125', '125', 'hourglass-open', '26', '26', 'bowtie', '126', '126', 'bowtie-open', '27', '27', 'circle-cross', '127', '127', 'circle-cross-open', '28', '28', 'circle-x', '128', '128', 'circle-x-open', '29', '29', 'square-cross', '129', '129', 'square-cross-open', '30', '30', 'square-x', '130', '130', 'square-x-open', '31', '31', 'diamond-cross', '131', '131', 'diamond-cross-open', '32', '32', 'diamond-x', '132', '132', 'diamond-x-open', '33', '33', 'cross-thin', '133', '133', 'cross-thin-open', '34', '34', 'x-thin', '134', '134', 'x-thin-open', '35', '35', 'asterisk', '135', '135', 'asterisk-open', '36', '36', 'hash', '136', '136', 'hash-open', '236', '236', 'hash-dot', '336', '336', 'hash-open-dot', '37', '37', 'y-up', '137', '137', 'y-up-open', '38', '38', 'y-down', '138', '138', 'y-down-open', '39', '39', 'y-left', '139', '139', 'y-left-open', '40', '40', 'y-right', '140', '140', 'y-right-open', '41', '41', 'line-ew', '141', '141', 'line-ew-open', '42', '42', 'line-ns', '142', '142', 'line-ns-open', '43', '43', 'line-ne', '143', '143', 'line-ne-open', '44', '44', 'line-nw', '144', '144', 'line-nw-open', '45', '45', 'arrow-up', '145', '145', 'arrow-up-open', '46', '46', 'arrow-down', '146', '146', 'arrow-down-open', '47', '47', 'arrow-left', '147', '147', 'arrow-left-open', '48', '48', 'arrow-right', '148', '148', 'arrow-right-open', '49', '49', 'arrow-bar-up', '149', '149', 'arrow-bar-up-open', '50', '50', 'arrow-bar-down', '150', '150', 'arrow-bar-down-open', '51', '51', 'arrow-bar-left', '151', '151', 'arrow-bar-left-open', '52', '52', 'arrow-bar-right', '152', '152', 'arrow-bar-right-open
Figure 3.11: Specifying the visual range of symbols.
plot_ly(mpg, x = ~cty, y = ~hwy) %>%
add_markers(symbol = I(18), alpha =0.5)
Figure 3.12: Setting a fixed symbol directly using I().
plot_ly(mpg, x = ~cty, y = ~hwy, alpha =0.5) %>%
add_markers(symbol = I(18), stroke = I("black"), span = I(1))
Figure 3.13: Using stroke and sapn to control the outline color as well as the width of that outline.
p <- plot_ly(mpg, x= ~cty, y= ~hwy, alpha = 0.3)
subplot (
add_markers(p, size = ~cyl, name = "default"),
add_markers(p, size = ~cyl, sizes = c(1,500), name = "custom")
)
## Warning: `line.width` does not currently support multiple values.
## Warning: `line.width` does not currently support multiple values.
Figure 3.14: Controlling the size range via sizes (measured in pixels).
plot_ly(mpg, x= ~cty, y= ~hwy, alpha =0.3, size = I(30) )
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
Figure 3.15: Setting a fixed marker size directly using marker.size.
# Fit a full-factorial linear model
m<- lm(
Sepal.Length ~ Sepal.Width * Petal.Length * Petal.Width,
data = iris
)
# (1) get a tidy () data structure of covariate-level info
# (e.g., point estimate, standard error etc.)
# (2) make sure term colum is a factor ordered by the estimate
# (3) plot estimate by term with an error bar for the standard error
broom :: tidy(m) %>%
mutate (term = forcats::fct_reorder(term, estimate)) %>%
plot_ly(x= ~estimate, y= ~term) %>%
add_markers(
error_x = ~list(value = std.error),
color = I ("black"),
hoverinfo = "x"
)