library(plotly)
## 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
#Al agregar el atributo “z” a la función plot_ly(), se puede representar marcadores, líneas y rutas en tres dimensiones. Esto permite reutilizar todas las técnicas aprendidas en las secciones 3.1 y 3.2 para crear gráficos en 3D.
plot_ly(mpg, x = ~cty, y = ~hwy, z = ~cyl) %>%
add_markers(color = ~cyl)
#Para crear una ruta en 3D, se puede utilizar la función add_paths() de manera similar a como se hace para crear una ruta en 2D, pero agregando una tercera variable “z”, tal como se ilustra en la Figura 8.2.
plot_ly(mpg, x = ~cty, y = ~hwy, z = ~cyl) %>%
add_paths(color = ~displ)
#En la Figura 8.3 se utiliza la función add_lines() en lugar de add_paths() para asegurarse de que los puntos estén conectados por el eje x, en lugar del orden de las filas.
plot_ly(mpg, x = ~cty, y = ~hwy, z = ~cyl) %>%
add_lines(color = ~displ)
#Al igual que con las líneas en 2D, se pueden crear varias líneas en 3D especificando una variable de agrupación.
plot_ly(mpg, x = ~cty, y = ~hwy, z = ~cyl) %>%
group_by(cyl) %>%
add_lines(color = ~displ)
#Para los gráficos en 3D, es importante tener en cuenta que los objetos de eje son parte de la definición de la escena, que a su vez es parte del diseño. Esto significa que si se desea establecer títulos de ejes (por ejemplo, en la Figura 8.5), o personalizar la definición de los ejes, la relación entre los mismos (es decir, relación de aspecto) o la configuración predeterminada de la cámara, se debe hacer a través de la escena.
plot_ly(mpg, x = ~cty, y = ~hwy, z = ~cyl) %>%
add_lines(color = ~displ) %>%
layout(
scene = list(
xaxis = list(title = "MPG city"),
yaxis = list(title = "MPG highway"),
zaxis = list(title = "Number of cylinders")
)
)
#La creación de superficies 3D con add_surface() es muy similar a la creación de mapas de calor con add_heatmap(). De hecho, incluso es posible crear superficies 3D sobre ejes x/y categóricos (intente cambiar add_heatmap() por add_surface() en la Figura 7.3). Sin embargo, es importante tener una ordenación lógica de los ejes x/y en un gráfico de superficie, ya que plotly.js interpola los valores z. Por lo general, la superficie 3D se encuentra sobre una región continua, como se muestra en la Figura 8.6 para mostrar la altura de un volcán. Si se proporciona una matriz numérica a z como en la Figura 8.6, no es necesario proporcionar los atributos x e y, pero si se proporcionan, la longitud de x debe coincidir con el número de columnas de la matriz y la longitud de y debe coincidir con el número de filas.
x <- seq_len(nrow(volcano)) + 100
y <- seq_len(ncol(volcano)) + 500
plot_ly() %>% add_surface(x = ~x, y = ~y, z = ~volcano)