Как внедрить карту с помощью функции inset_element() из пакета patchwork в R

#r #ggplot2 #patchwork

#r #ggplot2 #пэчворк

Вопрос:

Я пытаюсь создать небольшую карту, встроенную в большую карту, используя функцию inset_element() из пакета patchwork.

Я получаю эту ошибку при попытке вставить карту:

 Error in seq.default(design$t[i], design$b[i]) : 
  'from' must be a finite number
 

вот пример:

 library(patchwork)
library(sf)
library(ggplot2)
library(rnaturalearth)
world <- rnaturalearth::ne_countries(scale='medium',returnclass = 'sf')
p1 <- ggplot() 
  geom_sf(data= world)

p2 <- ggplot()   
  geom_point(data = iris, aes(x= Petal.Width, y = Petal.Length))

# 2 maps = fail
p1   inset_element(p1, left =0.75, right =0.95, bottom = 0.75, top =0.95)

# 1 map as "main" = success
p1   inset_element(p2, left =0.75, right =0.95, bottom = 0.75, top =0.95)


# 1 map as "inset" = fail
p2   inset_element(p1, left =0.75, right =0.95, bottom = 0.75, top =0.95)

packageVersion("patchwork")
 

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

Ответ №1:

inset_element похоже, это новая функция в patchwork, и я думаю, вы обнаружили ошибку, которая также затронула других пользователей. Ошибка выдается в этой строке в set_panel_dimensions , которая вызывается только при попытке распечатать (а не создать) этот объект patchwork:

 fail <- p2   inset_element(p1, left =0.75, right =0.95, bottom = 0.75, top =0.95)

fail
#> Error in seq.default(design$t[i], design$b[i]) : 
#>   'from' must be a finite number
 

Однако мы можем пока обойти эту ошибку, установив высоту и ширину макета для patches объекта равными 1:

 fail$patches$layout$widths  <- 1
fail$patches$layout$heights <- 1

fail
 

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

Я ссылался на этот ответ в теме patchwork github issues, упомянутой выше.