Комбинируйте графики разных классов в R

Я работаю с графиками разных классов в r, а именно tmap (основные сюжеты) и ggplot (представляют второстепенную информацию).

library(raster)
library(tmap)
library(RStoolbox)
library(gridExtra)
library(ggplot2)

data("World")
r1 <- raster(ncol=2, nrow=2)
values(r1) <- c(1.5, -0.5, 0.5, -1.5)

r2 <- raster(ncol=2, nrow=2)
values(r2) <- c(1, 1, 0.5, -1.5)

# Then I create two tmap objects and two ggplot objects
tm1 <- tm_shape(World) + tm_polygons()  
tm2 <- tm_shape(World) + tm_polygons()

gg1 <- ggR(r1,  coord_equal = F, geom_raster = 1) + theme(legend.position = "none", axis.title = element_blank(), axis.text = element_text(size = 3.5))
gg2 <- ggR(r2,  coord_equal = F, geom_raster = 1) + theme(legend.position = "none", axis.title = element_blank(), axis.text = element_text(size = 3.5))

# Save each separately
# 1 tmap
current.mode <- tmap_mode("plot")
tmap_plot <- tmap_arrange(tm1, tm2, ncol = 1, nrow = 2)
tmap_save(tmap_plot, "tmap_plot.png", height = 8, width = 6)

# 2 ggplot
g <- arrangeGrob(gg1, gg2)
ggsave(file = "ggplot.png", g, height = 1.75, width = 1.75)

В настоящее время я сохраняю каждый класс отдельно и объединяю их с помощью инструментов ручного редактирования. Я ищу решение, как автоматизировать этот процесс уже в r. Я также открыт для предложений, как это сделать на других языках программирования, просто это автоматизирует процесс. Переключение на разные классы в моем случае не вариант.

Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
153
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете рисовать ggplots прямо поверх tmaps, используя grid::viewport.

Сначала загрузите grid и установите желаемое расположение и размеры области просмотра:

library(grid)

subplot_vp <- viewport(x = 0.15, 
                       y = 0.35, 
                       width = unit(0.25, "npc"), 
                       height = unit(0.25, "npc"),
                       name = "inset")

Теперь вы можете сделать

tm1
grid.draw(grobTree(ggplotGrob(gg1), vp = subplot_vp))

и

tm2
grid.draw(grobTree(ggplotGrob(gg2), vp = subplot_vp))

Другие вопросы по теме