es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Trasando en proyección Robinson en R

Utilicé el código que encontré en línea para crear un mapa básico con proyección Robinson en R. No estoy seguro de cómo agregar mis datos a él.

world <- ne_countries(scale = "medium", returnclass = "sf")
class(world)

(a <- ggplot(data = world) +
 geom_sf() + theme_bw() +
 coord_sf(crs = "+proj=robin +lon_0=0w"))

Llamemos al marco de datos df.

Intenté

(a <- ggplot(data = world) +
geom_sf() + theme_bw() +
geom_raster(
data = df,
aes(
  x=latitude,
  y=longitude,
  fill=tos
))  +
coord_sf(crs = "+proj=robin +lon_0=0w"))

pero obtengo un error:

Error in FUN(X[[i]], ...) : object 'latitude' not found

Y también intenté

a <- a + theme(plot.background=element_rect(fill="df"))

pero obtengo un error:

Error in grid.Call.graphics(C_rect, x$x, x$y, x$width, x$height, resolveHJust(x$just, : invalid color name 'df'

Cuando reviso los nombres(df) solo obtengo uno llamado "layer".

Si solo uso plot(df) ¡obtengo el mapa real! pero quiero representarlo de manera más agradable en una proyección Robinson, ¿cómo puedo hacerlo?

class      : RasterLayer 
dimensions : 300, 360, 108000  (nrow, ncol, ncell)
resolution : 1, 0.6  (x, y)
extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
crs        : NA 
source     : memory
names      : layer 
values     : -1.728468, 35.60058  (min, max)
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para agregar tus datos en un mapa de proyección de Robinson, asegúrate de que los nombres de las columnas en tu marco de datos coincidan con las variables utilizadas en la función aes() en geom_raster(). Parece que has utilizado latitude y longitude en lugar de y y x, respectivamente. Intenta reemplazar latitude con y y longitude con x en la función aes() en el siguiente código:

    (a <- ggplot(data = world) +
      geom_sf() + theme_bw() +
      geom_raster(
        data = df,
        aes(
          x = x, ## reemplazar con x
          y = y, ## reemplazar con y
          fill = tos
        )) +
      coord_sf(crs = "+proj=robin +lon_0=0w"))
    

    En cuanto a agregar un fondo de relleno al gráfico usando theme(), debes especificar un nombre o código de color válido, no un nombre de marco de datos como "df". Por ejemplo, si deseas especificar un fondo blanco, puedes usar fill = "white". Intenta incluir la siguiente línea de código después de coord_sf():

    a <- a + theme(plot.background = element_rect(fill = "white"))
    

    Ten en cuenta que esto agregará un fondo blanco a todo el gráfico, no solo a la capa raster. Si solo deseas agregar un fondo blanco a la capa raster, puedes crear una nueva capa con un relleno blanco y ajustar su tamaño utilizando annotation_custom(). Aquí tienes un ejemplo:

    library(ggplot2)
    library(raster)
    
    # Cargar datos del mapa mundial
    world <- ne_countries(scale = "medium", returnclass = "sf")
    
    # Crear datos de muestra del raster
    set.seed(123)
    df <- data.frame(
      x = runif(100, -180, 180),
      y = runif(100, -90, 90),
      tos = runif(100, 0, 1)
    )
    r <- rasterFromXYZ(df)
    
    # Crear mapa con capa raster
    a <- ggplot(data = world) +
      geom_sf() + theme_bw() +
      geom_raster(
        data = df,
        aes(
          x = x,
          y = y,
          fill = tos
        )) +
      coord_sf(crs = "+proj=robin +lon_0=0w")
    
    # Crear nueva capa con fondo blanco
    bg <- annotation_custom(
      grob = rectGrob(gp = gpar(fill = "white", alpha = 0.7)),
      xmin = -180, xmax = 180, ymin = -90, ymax = 90
    )
    
    # Agregar capa de fondo blanco solo a la capa raster
    a <- a + bg + theme(plot.background = element_rect(fill = NA))
    
    # Mostrar gráfico
    a
    

    Este código agrega un rectángulo blanco semitransparente al fondo de la capa raster usando annotation_custom(), y elimina el relleno de fondo del resto del gráfico usando theme(). Puedes ajustar la transparencia y el tamaño de la capa de fondo cambiando los argumentos alpha, xmin, xmax, ymin e ymax, respectivamente.

Comments are closed.