【问题标题】:plotting multiple maps using rworldmap library使用 rworldmap 库绘制多个地图
【发布时间】:2013-10-18 00:41:01
【问题描述】:

我想使用 rworldmap 绘制多个地图,其中每一列是单独的月份,行是年份。我知道这可以使用 facet_grid 在 ggmap 中完成。如何使用 rworldmap 做到这一点?

例如,mydata 文件包含每个点的 latitudelongitudemonthyear 列。到目前为止我的代码:

library(rworldmap)
newmap <- getMap(resolution = "high")
plot(newmap, xlim = c(110, 155), ylim = c(-35, -20), asp = 1)
p1 <- read.csv("mydata.csv")
points(p1$lon, p1$lat, col = "red", cex = .5)

【问题讨论】:

    标签: r maps rworldmap


    【解决方案1】:

    要使用 rworldmap 绘制多个地图,您可以使用布局和几个循环来使用下面的代码创建这样的图。

    我知道这些天循环并不酷,但我仍然这么认为。可能可以将所有这些都放入应用类型函数中,但在绘图时循环的速度很少成为问题。

    (另见常见问题解答中的第 19 项多面板图 http://cran.r-project.org/web/packages/rworldmap/vignettes/rworldmapFAQ.pdf)

    library(rworldmap)
    newmap <- getMap(resolution = "coarse") #'low' or even 'coarse' resolution map may be sufficient
    
    #example data for 2 years 6 months each
    month <- c(1:6,1:6)
    year <- c(rep(2012,6),rep(2013,6))
    lon <- c(120:131)
    lat <- c(-35:-24)
    p1 <- data.frame(month=month,year=year,lon=lon,lat=lat)
    
    months <- unique(p1$month)
    years <- unique(p1$year)
    
    oldPar <- par(mar=c(2, 0, 0, 2)) #margins top,bottom,left,right
    
    #use layout to create multiple panels including space at top for a title
    nPanels <- layout( cbind(c(0,1:6),c(0,7:12))
                       , heights=c(lcm(1),rep(1,6))
                       , respect=F )
    
    
    for( yrNum in 1:length(years) )
    {
      yr <- years[yrNum]
      for( moNum in 1:length(months) )
      {
        mo <- months[moNum]
    
        cat(yr,mo,"\n")
    
        plot(newmap, xlim = c(110, 155), ylim = c(-35, -20), asp = 1)
        mtext( paste(yr,"month",mo), cex=0.7) #add titile to subplot
    
        pMoYr <- p1[ p1$year==yr & p1$month==mo, ]
    
        points(pMoYr$lon, pMoYr$lat, col = "red", cex = 3)
      }
    }
    
    mtext("rworldmap layout demo",outer=TRUE,line=-2)
    
    par(oldPar)
    

    【讨论】:

    • 如何为 mapCountryData() 使用这个循环(参见我的 stackoverflow.com/questions/33945984/…)?我尝试为我的数据重新排列循环,但没有完成。这里我的更改:layout( cbind(c(0,1:3),c(0,4:6))(for 3 by 3 plots) 和 for( moNum in 1:length(df[,1:6]) ) { mo &lt;- months[moNum] plot(newmap, mapCountryData(spdf,nameColumnToPlot="BLUE.nuts")) }。我的问题是如何循环 nameColumnToPlot()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多