Выравнивание выходных данных решетки и tmap с помощью окон просмотра

Я пытаюсь выровнять несколько панелей (2 карты) и вывод сетки из пакета openair с пояснительным текстом, используя сетку:

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

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

в идеале я хотел бы получить это:

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

Код, который я использую, таков:

library(tmap)
library(tmaptools)
library(openair)
library(grid)
library(gridExtra)


london_map <- qtm(read_osm("London"))
london_terrain <- qtm(read_osm("London", type = "stamen-terrain"))

pp_plot <- polarPlot(mydata, type="season")
top.vp <- 
  viewport(layout=grid.layout(3, 11,
                              heights=unit(c(0.5, 3.5 ,4), "inches"),
                              widths=unit(c(1,1,1,1,1,1,1,1,1,1), "inches")))


png(filename = "test.png", width = 11, height = 8, units ="in", res=72)

grid.newpage()
pushViewport(top.vp)
print(london_map, vp = viewport(layout.pos.row = 2, layout.pos.col=1:5, just="left"))
print(london_terrain, vp = viewport(layout.pos.row = 2, layout.pos.col=6:11, just="left"))

pushViewport(viewport(layout.pos.row = 3, layout.pos.col=1:7))
plot(pp_plot$plot, newpage=FALSE)
popViewport()     
pushViewport(viewport(layout.pos.row = 3, layout.pos.col=8))
grid.text("Notes: \n1. quo durius te exerces, eo facilius certabis\n2. Ursis fidimus\n3. audaces fortuna juvat \n", just=0)

dev.off()

Я устал работать с справедливыми аргументами, но безрезультатно.


person James Thomas Durant    schedule 16.01.2018    source источник
comment
Вы пробовали grid.arrange() или gtable? Что-то вроде этого: cran.r-project.org/web /packages/egg/vignettes/Ecosystem.html   -  person SCDCE    schedule 16.01.2018
comment
Для позиционирования полярного графика взгляните на аргумент position для ?print.trellis (который документирует функцию, которая отправляется вашим вызовом plot(pp_plot,...)). Затем, для построения текста, не хотите ли вы поместить его в layout.pos.col=6 (не layout.pos.col=8)? Наконец, и это не имеет значения, ваш макет имеет 11 столбцов, но вы указываете только 10 значений ширины.   -  person Josh O'Brien    schedule 16.01.2018
comment
@JoshO'Brien хороший улов по ширине - исправлено. Аргумент position позволяет мне уменьшить размер polarPlots (например, position =c(0,0,0.5,0.5) уменьшает его вдвое, но не исправляет выравнивание. Текст - даже с layout.pos.col=6 также не выровнен. Может быть, есть какое-то пустое пространство, которое мне нужно как-то обрезать) с карт и/или polarPlots?   -  person James Thomas Durant    schedule 16.01.2018
comment
@JoshO'Brien хорошо, хотя в документации указано, что ограничения 0-1, похоже, я могу выровнять их с position = c(-0.18,0,0.82,1) Спасибо, сэр!   -  person James Thomas Durant    schedule 16.01.2018
comment
... и использование x=argument в grid.text привело к упорядочению. @SCDCE Я также посмотрю на gtable и grid.arrange.   -  person James Thomas Durant    schedule 16.01.2018


Ответы (1)


Хорошо, основываясь на вышеизложенном, это достигло того, что мне было нужно. Мне нужно было использовать отрицательные позиции:

png(filename = "test.png", width = 11, height = 8, units ="in", res=72)

grid.newpage()
pushViewport(top.vp)
print(london_map, vp = viewport(layout.pos.row = 2, layout.pos.col=1:5, just=c("left","top")))
print(london_terrain, vp = viewport(layout.pos.row = 2, layout.pos.col=6:11, just="left"))

pushViewport(viewport(layout.pos.row = 3, layout.pos.col=1:7))
plot(pp_plot$plot, newpage=FALSE, position=c(-0.18,0,0.82,1))
popViewport()     
pushViewport(viewport(layout.pos.row = 3, layout.pos.col=6))
grid.text("Notes: \n1. quo durius te exerces, eo facilius certabis\n2. Ursis fidimus\n3. audaces fortuna juvat \n", 
          x = 0.85, just = "left")

dev.off()
person James Thomas Durant    schedule 17.01.2018