Постройте 2 объекта tmap бок о бок

Пример:

Я хочу построить рядом два графика tmap, которые генерируются этим кодом.

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)

plot1 и plot2 отлично работают как отдельные автономные графики:  введите описание изображения здесь

Проблема:

У меня проблемы с размещением обоих участков рядом. Я пытался:

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).

Вопрос:

Как я могу расположить оба объекта plot1 и plot2 рядом (ncol=2)?

Обновление:

Что касается предлагаемого решения на основе сетки, я получаю перекрывающиеся графики вместо двух столбцов.

введите здесь описание изображения

> 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 

person user2030503    schedule 17.12.2015    source источник


Ответы (3)


Хороший вопрос!

grid.arrange не поддерживает графики tmap (пока?) Так же, как ggplot2 графики.

Есть два варианта:

1) Используйте маленькие кратные, присвоив эстетике два значения (см. Примеры из tm_facets). Ваши сюжеты не используют эстетику, но вы можете обмануть это следующим образом:

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 для определения окон просмотра:

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:

tm_shape(World, projection = "merc", xlim=c(-2e6, 6.5e6), ylim=c(-4e6, 8.5e6)) + 
  tm_borders(alpha = 0.3, lwd=2)

Он производит ту же карту, но его код немного чище.

person Martijn Tennekes    schedule 18.12.2015
comment
Спасибо, к сожалению, по-прежнему есть 2 проблемы: а) графики решения на основе сетки переносятся на графики, но они перекрываются. б) решение, использующее кратные, создает два хорошо выровненных графика, но в 1 столбце вместо 2. - person user2030503; 19.12.2015
comment
Не могли бы вы опубликовать изображение вопроса а? Что касается вопроса b, количество строк и столбцов автоматически определяется соотношением сторон графического устройства и фигур. Вы можете установить это вручную с помощью +tm_facets(ncol=2) - person Martijn Tennekes; 20.12.2015
comment
У меня это работает. Не могли бы вы поделиться своим sessionInfo()? - person Martijn Tennekes; 20.12.2015
comment
Ах, как я и думал! tmap 1.2 был выпущен две недели назад на CRAN, где эта ошибка области просмотра была исправлена. - person Martijn Tennekes; 21.12.2015
comment
Спасибо большое, к сожалению, двоичные файлы OS X Mavericks на CRAN все еще находятся на версии 1.0. - person user2030503; 21.12.2015

tmap_arrange ()

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

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)
person scottr    schedule 26.06.2018

Мне было интересно, стало ли тем временем возможным построить 5 карт в следующем примере рядом, не переключаясь на tm_facets(ncol=5).

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)
person Erich    schedule 09.04.2018