Repaso del taller anterior
Introducción al paquete ggplot2
Introducción al paquete sf
ggplot2 permite hacer los gráficos por capas, hay diferentes capas pero 3 fundamentales para hacer el gráficos, es decir, elementos que se van agregando.
data: el data frame que contiene las variables que vamos a graficar
aesthetics mapping: las variables que vamos a graficar y donde (x, y)
geometrics: el tipo de gráfico que haremos (puntos, líneas, barras, etc.)
capas adicionales para mejorar el gráfico (título, etiqueta, nombres de ejes, etc.)
Elemento | Descripción | Función |
---|---|---|
Data | Set de datos a plotear | ggplot() |
Aesthetics | Escalas en la que mapearemos los datos | aes() |
Geometries | Los elementos visuales utilizados para nuestros datos | geom_*() |
Facets | Para ploteos múltiples | facet_*() |
Statistics | Construye nuevas variables (count, density, etc.) | stat_*() |
Scales | Que elementos serán mapeados para las variables definidas | scale_*() |
Coordinate | Cartesianas o polares | coord_*() |
Themes | Estilos gráficos | theme_*() |
data
, aesthetics
, geometry
data
, aesthetics
, geometry
+
data
, aesthetics
, geometry
+
ggplot(data = <df>) +
aes(x = <Variable_1>, y = <Variable_2>) +
geom_bar()
# Cargo los paquetes y los datos library(ggplot2)load("data/listado.Rdata")ggplot(data = listado) + aes(x = review_scores_rating, y = price)
ggplot(data = listado) + aes(x = review_scores_rating, y = price) + geom_point()
ggplot(data = listado) + aes(x = review_scores_rating, y = price) + geom_point(color = "purple", alpha = 0.7)
ggplot(data = listado) + aes(x = review_scores_rating, y = price, color = "purple") + geom_point()
En aes se definen los parámetros estéticos de las variables.
Aquellos que son fijos como color = "read", fill = "blue", etc. se escriben afuera de aes().
listado %>% filter(!is.na(review_scores_rating)) %>% group_by(review_scores_rating) %>% summarize(median_price = median(price), cantidad = n()) %>% ggplot() + aes(x = review_scores_rating, y = median_price, size = cantidad) + geom_point(color = "purple", alpha = 0.7)
listado %>% filter(!is.na(review_scores_rating)) %>% group_by(review_scores_rating) %>% summarize(median_price = median(price)) %>% #BREAK ggplot() + #BREAK aes(x = review_scores_rating, y = median_price) + #BREAK geom_point(color = "purple", alpha = 0.7) + labs(x = 'Puntaje', y = 'Precio mediano', size = '# Evaluaciones', title = 'Precios medianos según puntaje de evaluaciones')
La función theme_*() controla el estilo del gráfico, permite definir el color de fondo, la apariencia de la leyenda, tamaños de letra, etc.
Vienen predefinidos una variedad de temas pero también se puede instalar un paquete con más temas ggthemes.
Explorar otros temas.
Cambiamos el fondo a color blanco al elegir el tema 'bw'
# Cambio de temalistado %>% filter(!is.na(review_scores_rating)) %>% group_by(review_scores_rating) %>% summarize(median_price = median(price), cantidad = n()) %>% ggplot() + aes(x = review_scores_rating, y = median_price, size = cantidad) + geom_point(color = "purple", alpha = 0.7) + labs(x = 'Puntaje', y = 'Precio mediano', size = '# Evaluaciones', title = 'Precios medianos según puntaje de evaluaciones') + theme_bw()
Es preferible el formato pdf ya que se guarda en formato vectorial y así evitamos que se pixele como puede ocurrir con los formatos png, jpg, etc.
ggsave('precio_puntaje.pdf')
Podemos definir otros argumentos para variar el tamaño del gráfico, entre otras cosas. Para guardarlo en png cambiamos pdf por png.
Al gráfico anterior agregarle facetas por la variable room_type. Ver ?facet_wrap
Notar cómo están generadas las variables median_price y cantidad y cambiar lo necesario.
Guardarlo en formato png
Creamos un nuevo objeto nb que contiene la mediana de precios para cada barrio.
nb <- listado %>% group_by(neighbourhood_group) %>% summarise(median_price = median(price))
nb %>% ggplot(aes(x = neighbourhood_group, y = median_price)) + geom_bar(stat = 'identity')
También podemos escribir la función aes() dentro de ggplot()
El argumento de geom_bar(), stat='identity', indica que la altura de la barra debe ser igual al valor y.
nb %>% ggplot(aes(x = neighbourhood_group, y = median_price)) + geom_bar(stat = 'identity') + theme(axis.text.x = element_text(angle = 60, hjust = 1))
La función element_text() la llamo dentro de theme(), debo especificar a que elemento de texto quiero modificar: axis.text.x.
nb %>% ggplot(aes(x = reorder(neighbourhood_group, -median_price), y = median_price)) + geom_bar(fill = 'purple', alpha = .7, stat = 'identity') + theme(axis.text.x = element_text(angle = 60, hjust = 1)) + labs(x = '', y = 'Precio mediano', title = 'Precio mediano diario por barrio')
Atributos | SIG | SDG |
---|---|---|
Disciplinas | Geografía | Geografía, Computación, Estadística |
Foco | Interfaz Gráfica | Código |
Reproducibilidad | Mínimo | Máximo |
Es sencillo conectar R con programas SIG: GRASS GIS (rgrass7), SAGA (RSAGA), QGIS (RQGIS y qgisremote), incluso ArcGIS (arcgisbinding).
Combina las funcionalidades de 3 paquetes: sp, rgeos y rgdal
Ventajas respecto a otros paquetes:
Mayor velocidad para importar y exportar los datos
Más tipos de geometrías soportadas
Compatibilidad con tidyverse. Funciona el pipe!
El paquete sp es predecesor de sf.
Muchos paquetes espaciales de R todavía dependen del paquete sp, por lo tanto, es importante saber cómo convertir.
Convertir objetos sf a sp
# Para transformar de SF a SPobjeto.sp <- as(<objeto.sf>, "Spatial")
Convertir objetos sp a sf
# Para transformar de SP a SFobjeto.sf <- st_as_sf(<objeto.sp>)
Dependiendo del país, será la institución oficial que las provea.
En Uruguay una gran cantidad de información encontrarán en IDE.
Un paquete de R para trabajar con datos de Uruguay es geouy
Los datos de Barcelona venían en el conjunto de datos abiertos de insideAirbnb.
# cargo paquetelibrary(sf)# importo shapesbarrios <- st_read("data/neighbourhoods.geojson", stringsAsFactors = FALSE)# consulto claseclass(barrios)
# consulto métodosmethods(class = "sf")
# cargo datosload("data/listado.Rdata")
# cuento la cantidad de alojamientos por barrioslibrary(dplyr)bn <- listado %>% group_by(neighbourhood_group) %>% mutate(median_price = median(price)) %>% ungroup()# uno barcelona con el objeto espacial barriosbarrios <- left_join(barrios, bn, by = "neighbourhood_group")
library(ggplot2)m <- barrios %>% ggplot() + # Defino la geometría geom_sf(aes(fill = median_price))
m <- barrios %>% ggplot() + geom_sf(aes(fill = median_price)) + # Defino la geometría scale_fill_viridis_c("Precio", option = "D", trans = "sqrt", alpha = .9)
m <- barrios %>% ggplot() + geom_sf(aes(fill = median_price)) + # Defino la geometría scale_fill_viridis_c("Precio", option = "D", trans = "sqrt", alpha = .9) + ggtitle("Precio mediano por barrio") + ggsnh::north(barrios, location = "topleft", symbol = 3) + ggsn::scalebar(barrios, dist = 50, dist_unit = "km", transform = F, model = "WGS84")
Repaso del taller anterior
Introducción al paquete ggplot2
Introducción al paquete sf
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |