首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图2 tmap对象并排

图2 tmap对象并排
EN

Stack Overflow用户
提问于 2015-12-17 21:20:38
回答 3查看 5.5K关注 0票数 5

示例:

我想并排绘制两个tmap图,这是由这段代码生成的。

代码语言:javascript
复制
library(tmap)
library(gridExtra)

data(World)

plot1=
  tm_shape(World, projection = "merc") + 
  tm_layout("", inner.margins=c(-1.72, -2.05, -0.75, -1.56)) +
  tm_borders(alpha = 0.3, lwd=2)

plot2=
  tm_shape(World, projection = "merc") + 
  tm_layout("", inner.margins=c(-1.72, -2.05, -0.75, -1.56)) +
  tm_borders(alpha = 0.3, lwd=2)

plot1plot2作为单独的独立情节运作得很好:

问题:

我很难把两个情节并排放在一起。我试过:

grid.arrange(plot1, plot2)通过一个错误Error in arrangeGrob(..., as.table = as.table, clip = clip, main = main, : input must be grob!。我认为这应该工作(使用gridExtra),因为tmap似乎是基于grid graphics system的。

此外,par(mfrow=c(1,2))不工作,因为它只显示一个图(猜测这是相关的,因为tmap图不遵循base graphics system)。

问题:

如何同时绘制对象plot1plot2 (ncol=2)?

更新

对于所提出的基于网格的解决方案,我得到的是重叠图,而不是两列排列的图。

代码语言:javascript
复制
> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)

locale:
[1] de_DE.UTF-8/de_DE.UTF-8/de_DE.UTF-8/C/de_DE.UTF-8/de_DE.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] tmap_1.0    dplyr_0.4.3 sp_1.1-1   

loaded via a namespace (and not attached):
 [1] assertthat_0.1     class_7.3-11       classInt_0.1-23    colorspace_1.2-6   DBI_0.3.1          digest_0.6.8       e1071_1.6-4        ggplot2_1.0.1     
 [9] grid_3.1.2         gridBase_0.4-7     gtable_0.1.2       lattice_0.20-29    magrittr_1.5       MASS_7.3-35        munsell_0.4.2      parallel_3.1.2    
[17] plyr_1.8.3         proto_0.3-10       R6_2.1.1           raster_2.3-40      RColorBrewer_1.1-2 Rcpp_0.12.2        reshape2_1.4.1     rgdal_0.8-16      
[25] rgeos_0.3-11       scales_0.3.0       stringi_1.0-1      stringr_1.0.0      tools_3.1.2 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-18 08:33:03

问得好!

grid.arrange不支持tmap绘图(目前?)同样,它支持ggplot2绘图。

有两种选择:

1)通过为美学分配两个值来使用小倍数(参见tm_facets中的示例)。你的情节不需要美学,但你可以这样做:

代码语言:javascript
复制
tm_shape(World, projection = "merc") + 
  tm_fill(col=c("white", "white")) +
  tm_layout("", inner.margins=c(-1.72, -2.05, -0.75, -1.56)) +
  tm_borders(alpha = 0.3, lwd=2)

2)使用grid包定义视图:

代码语言:javascript
复制
library(grid)
grid.newpage()
pushViewport(viewport(layout=grid.layout(1,2)))
print(plot1, vp=viewport(layout.pos.col = 1))
print(plot2, vp=viewport(layout.pos.col = 2))

另一件事,您也可以在tm_shape中使用边界框参数,而不是用负的内部边距裁剪形状。

代码语言:javascript
复制
tm_shape(World, projection = "merc", xlim=c(-2e6, 6.5e6), ylim=c(-4e6, 8.5e6)) + 
  tm_borders(alpha = 0.3, lwd=2)

它生成相同的地图,但代码稍微干净一些。

票数 7
EN

Stack Overflow用户

发布于 2018-06-26 03:29:15

tmap_arrange()

https://cran.r-project.org/web/packages/tmap/tmap.pdf

代码语言:javascript
复制
data(World)
w1 <- qtm(World, projection = "eck4", title="Eckert IV")
w2 <- qtm(World, projection = "merc", title="Mercator")
w3 <- qtm(World, projection = "wintri", title="Winkel-Tripel")
w4 <- qtm(World, projection = "robin", title="Robinsin")

current.mode <- tmap_mode("plot")
tmap_arrange(w1, w2, w3, w4)
tmap_mode(current.mode)
票数 10
EN

Stack Overflow用户

发布于 2018-04-09 12:55:21

我想知道,在此期间,是否有可能将下面的示例中的5幅地图并排绘制,而无需切换到tm_facets(ncol=5)

代码语言:javascript
复制
data(NLD_prov, NLD_muni)

tmap_mode("plot")
tm_shape(NLD_muni) +
tm_fill(c("pop_0_14", "pop_15_24", "pop_25_44", "pop_45_64", "pop_65plus"),
        style="kmeans", 
        palette=list("Oranges", "Greens", "Blues", "Purples", "Greys"),
        title=c("Population 0 to 14", "Population 15 to 24", "Population 25 to 44",
                "Population 45 to 64", "Population 65 and older")) +
tm_shape(NLD_prov) +
tm_borders() +
tm_format_NLD(frame = TRUE, asp=0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34344454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档