El presente documento contiene el solucionario a los ejercicios 3.9.1 del libro de R for Data Science de Hadley Wickham y Garrett Grolemund en su versión en español.
Este documento se realiza con fines académicos para el curso de Técnicas de Exploración de Datos de la carrera de Estadística e Informática de la Universidad Nacional Agraria La Molina de Lima, Perú.
Los sistemas de coordenadas son probablemente la parte más complicada de ggplot2. El sistema predeterminado es el sistema de coordenadas cartesianas, donde las posiciones x e y actúan independientemente para determinar la ubicación de cada punto. Hay varios otros sistemas de coordenadas que ocasionalmente son útiles
ggplot(data = millas, mapping = aes(x = clase, y = autopista)) +
geom_boxplot()
ggplot(data = millas, mapping = aes(x = clase, y = autopista)) +
geom_boxplot() +
coord_flip()
nz <- map_data("nz")
ggplot(nz, aes(long, lat, group = group)) +
geom_polygon(fill = "white", colour = "black")
ggplot(nz, aes(long, lat, group = group)) +
geom_polygon(fill = "white", colour = "black") +
coord_quickmap()
bar <- ggplot(data = diamantes) +
geom_bar(
mapping = aes(x = corte, fill = corte),
show.legend = FALSE,
width = 1
) +
theme(aspect.ratio = 1) +
labs(x = NULL, y = NULL)
bar + coord_flip()
bar + coord_polar()
coord_polar().millas <- datos::millas
head(millas) %>% flextable()
fabricante | modelo | cilindrada | anio | cilindros | transmision | traccion | ciudad | autopista | combustible | clase |
|---|---|---|---|---|---|---|---|---|---|---|
audi | a4 | 1.8 | 1,999 | 4 | auto(l5) | d | 18 | 29 | p | compacto |
audi | a4 | 1.8 | 1,999 | 4 | manual(m5) | d | 21 | 29 | p | compacto |
audi | a4 | 2.0 | 2,008 | 4 | manual(m6) | d | 20 | 31 | p | compacto |
audi | a4 | 2.0 | 2,008 | 4 | auto(av) | d | 21 | 30 | p | compacto |
audi | a4 | 2.8 | 1,999 | 6 | auto(l5) | d | 16 | 26 | p | compacto |
audi | a4 | 2.8 | 1,999 | 6 | manual(m5) | d | 18 | 26 | p | compacto |
Para este gráfico de barras apiladas queremos observar cuantos autos
fueron fabricados en
dos mil ocho y de tracción en las 4 ruedas, teniendo en cuenta el
fabricante y la clase.
millas %>% filter(traccion == "4" & anio == 2008 & combustible == "p") %>% ggplot() +
aes(x = fabricante, fill = clase) + geom_bar()
Para convertir este grafico de barras apiladas en un grafico circular
tenemos que usar la
funcion coord_polar que está en el paquete de ggplot2.
Por defecto el argumento theta = "x" y nos da un gráfico
que se conoce como “Ojo de Buey”.
Cuando el argumento es theta = "x", los valores del eje
x se mapean a los ángulos en la
proyección polar, lo que hace que las barras (o marcadores) se extiendan
radialmente según los
valores del eje x.
millas %>% filter(traccion == "4" & anio == 2008 & combustible == "p") %>%
ggplot() +
aes(x = fabricante, fill = clase) +
geom_bar() +
coord_polar()
Cuando el argumento es theta = "y", los valores del eje
y se mapean a los ángulos en la proyección polar,
lo que significa que la longitud de las barras (la distancia radial) se
determina por los valores del eje y.
millas %>% filter(traccion == "4" & anio == 2008 & combustible == "p") %>%
ggplot() +
aes(x = fabricante, fill = clase) +
geom_bar() +
coord_polar(theta = "y")
labs()?La función labs() en el paquete ggplot2
se utiliza para establecer etiquetas y leyendas en un gráfico.
Permite personalizar y añadir títulos a los ejes x e y, la leyenda de
colores, el título del gráfico y
la leyenda general del gráfico. Es una forma conveniente de agregar
metadatos descriptivos a un gráfico
creado con ggplot2.
En este ejemplo usaremos el código del Gráfico de barras apiladas
millas %>% filter(traccion == "4" & anio == 2008 & combustible == "p") %>% ggplot() +
aes(x = fabricante, fill = clase) + geom_bar() +
labs(title = "Distribución de clase de automóviles
por fabricante en 2008", # Le agregamos un título adecuado
x = "Fabricante del auto", # Cambiamos el nombre del eje `x`
y = "Número de autos", # Cambiamos el nombre del eje `y`
fill = "Tipo de auto", # Cambiamos el nombre de la leyenda
subtitle = "Estos autos solo tienen tracción en las
cuatro ruedas y combustible premium", # le agremos un subtítulo
caption = "fuente: http://fueleconomy.gov") # le agregamos la fuente de donde se han proporcionado los datos
labs() no es la única función para
agregar títulos. xlab(),
ylab() y
ggtitle() realizan la misma función.
coord_map() y
coord_quickmap()?Coord_map y coord_quickmap son dos
funciones que permiten proyectar mapas en entornos de
visualización en R, aunque difieren significativamente en términos de
precisión y velocidad de cálculo.
Coord_mapcoord_map ofrece una proyección precisa
del mapa, aunque requiere un tiempo
de computación considerable. Su objetivo es aproximar la proyección lo
máximo posible
para obtener representaciones cartográficas fieles a la realidad, siendo
útil para áreas extensas o
cuando se necesita alta precisión espacial.
Coord_quickmapCoord_quickmap ofrece una aproximación
rápida para preservar líneas rectas en la visualización
del mapa, a diferencia de coord_map. Aunque menos precisa,
coord_quickmap destaca por su velocidad
y eficiencia computacional, siendo útil para representar áreas pequeñas
cercanas al ecuador donde la
preservación de líneas rectas es prioritaria sobre la precisión
cartográfica.
Para este ejemplo vamos a usar el mapa del mundo que por defecto la proyección que usa es Mercator
mundo <- ggplot(map_data("world"),
aes(long, lat, group = group)) +
geom_polygon(fill = "white", color = 1) +
labs(title = "Mapa del Mundo",
x = "Longitud",
y = "Latitud")
mundo
Vamos a usar el paquete tictoc, lo cual
nos permitirá saber el tiempo que demora en ejecutarse el código.
coord_maptic()
mundo + coord_map(xlim = c(-180, 180)) # Hemos modificado los límites del eje X debido a que la función produce unas líneas horizontales no deseadas
toc() -> tc_map
## 1.47 sec elapsed
coord_quickmaptic()
mundo + coord_quickmap()
toc() -> tc_quickmap
## 0.72 sec elapsed
grid.arrange(mundo + coord_map(xlim = c(-180, 180)), mundo + coord_quickmap(), ncol = 2)
Ejecutando los códigos podemos ver que cuando usamos la función
coord_quickmap el tiempo de ejecución es 0.72 sec elapsed
es menor al tiempo de ejecución de la función coord_map
siendo 1.47 sec elapsed
pero las proporciones del mapa no son tan precisas.
mundo + coord_map(projection = "vandergrinten",
xlim = c(-180, 180))
mundo + coord_map(projection = "orthographic")
mundo + coord_map(projection = "fisheye",
n = 4) # Índice de refracción
mundo + coord_map(projection = "sinusoidal",
xlim = c(-180, 180))
mundo + coord_map(projection = "cylindrical",
xlim = c(-180, 180))
mundo + coord_map(projection = "gall",
parameters = 45,
xlim = c(-180, 180))
podemos ver los diferentes tipos de proyecciones que hay ejecutando
el siguiente código ?mapproj::mapproject
italia <- map_data("italy") %>% ggplot() + aes(x = long, y = lat, group = group) +
geom_polygon(fill = "white", color = "black")
italia
coord_quickmap italia_mej <- italia + coord_quickmap(expand = TRUE) # Si es FALSO, los límites se toman exactamente de los datos o de xlim/ylim.
italia_mej
ggplot(data = millas, mapping = aes(x = ciudad, y = autopista)) +
geom_point()
Ya que la mayoría de los datos están por encima de esta línea, significa que la mayoría de los autos tienen un mejor rendimiento en autopista en comparación con su rendimiento en ciudad, gastan menos combustible en la autopista por milla recorrida.
coord_fixed importante? ¿Qué hace
geom_abline?coord_fixed se utiliza para garantizar que la relación
entre las unidades en ambos ejes sea igual en un gráfico, lo que
significa que una unidad en el eje x es igual a una unidad en el eje y
en términos de la apariencia visual del gráfico. Es útil cuando se
necesitan gráficos con una escala igual en ambos ejes, como en gráficos
de dispersión donde las unidades en ambos ejes deben ser proporcionales
entre sí.
geom_abline se utiliza para trazar líneas diagonales
(líneas de regresión) en un gráfico. Es útil para visualizar relaciones
lineales entre variables en un gráfico de dispersión o para agregar
líneas de regresión a otros tipos de gráficos para resaltar tendencias o
patrones en los datos.
ggplot(data = millas, mapping = aes(x = ciudad, y = autopista)) +
geom_point() +
geom_abline()
Si solo usamos la función geom_abline en el gráfico
traza una linea diagonal pero las proporciones estan mal ajustadas,
podemos interpretar erróneamente el gráfico.
ggplot(data = millas, mapping = aes(x = ciudad, y = autopista)) +
geom_point() +
geom_abline() +
coord_fixed()
Ahora al agregar la función coord_fixed aseguramos que
la línea que genera geom_abline tenga un ángulo de 45
grados. Esto facilita la comparación cuando los rendimientos en
autopista y ciudad son iguales.
Podemos usar el paquete plotly para tener un gráfico mas
interactivo
ca <- ggplot(data = millas, mapping = aes(x = ciudad,
y = autopista,
color = fabricante)) + # Para saber el fabricante del auto
geom_point() +
geom_abline() +
coord_fixed()
ggplotly(ca)
Ahora podemos ver la información de cada punto como por ejemplo cual es la cantidad de millas recorridas en autopista, en ciudad y cual es su fabricante.