我正在尝试绘制一张伦敦的插图 map 以及一张更大的英国 map 。我正在使用“tmap”软件包,我发现这是一个出色的软件包,并且特别容易转移到使用ggplot2一段时间。但是,有关如何使用tmap生成插图的文档尚不清楚。 reference manual描述了如何使用以下方法生成插图:

    save_tm(...insets_tm = NULL, insets_vp = NULL)

但尚不清楚应如何使用第二个命令insets_vp。我仅找到一个示例,该示例实际上提供了使用tmap生成insetmap的建议语法:
    alaska <- tm_shape(shp_alaska) + … print(alaska, vp=viewport(x=.1,
    y=.15, width=.2, height=.3))

请参阅此处的source of the above code。这实际上并未显示出美国和阿拉斯加/夏威夷的 map 是如何组合在一起的。至于我自己的编码尝试,我尝试了以下方法(dplyr,magrittr,rgdal,GISTools,RColorBrewer,tmap均已加载,R vn 3.3.2,RStudio 1.0.136):
  • 我首先为整个英国(UK_Im_Sec)和伦敦(London_Im_Sec)创建两个tmap对象多边形和点:
    UK_Im_Sec<-tm_shape(UKNI_LA_ll, is.master = TRUE)+
    tm_borders(lwd=0.25)+
    tm_shape(Immobile_residuals)+
    tm_dots(col="Sec_Name", style="cat", palette="Set1", title="Socio-economic background (NS-SEC)")+
    tm_layout(title="Mapping outlier residuals - non-predicted 'immobility' (Social class)", title.size = 3.0,
        title.position=c("center","TOP"),legend.outside = TRUE,
        legend.outside.position = "right",frame = FALSE)
    
    LDN_Im_Sec<-tm_shape(Immobile_resids_LDN)+
    tm_dots(col="Sec_Name", style="cat", palette="Set1", size = 0.25,title="Socio-economic background (NS-SEC)")+
    tm_shape(LDN_Poly, is.master = TRUE)+
    tm_borders(lwd=0.25)+
    tm_text(text="NAME", size = 0.6, auto.placement=TRUE)+
    tm_layout("London",title.position = c("center", "BOTTOM"),legend.outside = TRUE, legend.outside.position = "right", frame =  FALSE)
    
  • 然后我尝试保存结合了这两个对象的pdf:
    save_tmap(UK_Im_Sec,insets_tm = LDN_Im_Sec,filename="ZRMdlNoRg_SEC_-3to-5SDs_ImmobResids_FINAL.pdf", dpi=600)
    

  • 这将打印pdf,但仅打印英国 map 。所以,
  • 我尝试将insets_vp添加到代码中:
    save_tmap(UK_Im_Sec,insets_tm = LDN_Im_Sec,insets_vp=UK_Im_Sec, filename="ZRMdlNoRg_SEC_-3to-5SDs_ImmobResids_FINAL.pdf", dpi=600)
    

  • 但这给出了以下错误代码:
        Error in save_tmap(UK_Im_Sec, insets_tm = LDN_Im_Sec, insets_vp = UK_Im_Sec,  :
        Insets and/or its viewports not in the correct format
    
  • 然后,我尝试使用insets_vp结合print(x,viewport =(x =,y =,h =,w =)的建议语法,如下所示:
    save_tmap(UK_Im_Sec,insets_tm = LDN_Im_Sec,insets_vp=viewport(x=2, y=.15, width=.2, height=.3), filename="ZRMdlNoRg_SEC_-3to-5SDs_ImmobResids_FINAL.pdf", dpi=600)
    Error in inherits(insets_vp, "viewport") :
    could not find function "viewport"
    

  • 我知道其他人很难在其他程序包中生成插图,并且有些问题已经针对其他程序包被问及解决了,尤其是在ggplot中(由于链接的限制,我无法链接到这些问题),但是据我所知,在这个特定的tmap问题上什么都没有。

    这是我在这里的第一个问题,对于在提出问题时出现的任何错误,我们深表歉意。

    最佳答案

    您需要加载grid包。所以,这应该工作

    library(grid)
    save_tmap(UK_Im_Sec,insets_tm = LDN_Im_Sec,insets_vp=viewport(x=2, y=.15, width=.2, height=.3), filename="ZRMdlNoRg_SEC_-3to-5SDs_ImmobResids_FINAL.pdf", dpi=600)
    

    我将通过save_tmap示例来尽快更新美国Choropleth演示。

    关于r - 用R中的tmap包生成插图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42086603/

    10-12 06:01