命名在多条线上创建的基础 R 图(地图)

Naming a base R plot (map) created over multiple lines

有没有办法命名这个地块(地图)。它是用多行甚至一个循环创建的。我想给它命名,以便我可以将它与 cowplot 或网格排列一起使用。

 #create basemap
    maps::map("world", regions=c("usa"), fill=T, col="#898f9c", bg="transparent", ylim=c(21.0,50.0), xlim=c(-130.0,-65.0))
    points(acities$Longitude, acities$Latitude, pch=7, cex=1, col="#e9ebee")


    for (i in (1:dim(acitiesc)[1])) { 

      inter <- geosphere::gcIntermediate(c(acitiesc$destLon[i], acitiesc$destLat[i]), c(acitiesc$Longitude[i], acitiesc$Latitude[i]), n=500)
      lines(inter, lwd=0.5, col="#29487d", lty=1)

    }

如果这样更容易,我也可以创建一个图像,但最终用途将是一个闪亮应用程序的反应图,因此它需要响应用户输入。

谢谢。

您可以使用 ggplotify 包的 as.grob,如下所示。

library(nycflights13)
library(dplyr)
library(ggplotify)
library(grid)
usairports <- filter(as.data.frame(airports), lat < 48.5)
usairports <- filter(usairports, lon > -130)
usairports <- filter(usairports, faa!="JFK") 
jfk <- filter(airports, faa=="JFK")

myplot <- function(data, ref) {
  maps::map("world", regions=c("usa"), fill=T, col="#898f9c", 
            bg="transparent", ylim=c(21.0,50.0), xlim=c(-130.0,-65.0))
  points(data$lon, data$lat, pch=7, cex=1, col="#e9ebee")
  for (i in 1:nrow(data)) { 
    inter <- geosphere::gcIntermediate(c(ref$lon[1], ref$lat[1]), 
                              c(data$lon[i], data$lat[i]), n=500)
    lines(inter, lwd=0.5, col="#29487d", lty=1)
  }
}

p1 <- as.grob(~myplot(usairports, jfk))
grid.draw(p1)

p1 是一个 grob,可以使用 grid.arrangeggplot 对象组合,如下所示:

p2 <- ggplot(data=usairports, aes(x=dst)) + geom_bar() + theme_bw()
gridExtra::grid.arrange(p1, p2)