2014-02-18 2 views
6

У меня есть 2 графы, карта построена с ggplot2, как это:R соединить традиционный сюжет и ggplot2

w<-ggplot()+ 
    geom_polygon(data=dep_shp.df, aes(x=long,y=lat,group=group,fill=classJenks))+ 

    # scale_fill_gradient(limits=c(40, 100))+ 
    labs(title ="Classification de la proportion de producteurs par départements 
     \n par la methode de jenks (2008)")+ 
    theme_bw()+ 
    coord_equal() 

и график как объект типа classIntervals из classInt библиотеки.

Я хотел бы собрать это 2 графика. Я пробовал:

vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y) 
grid.newpage() 
pushViewport(viewport(layout = grid.layout(1, 2))) 

#creation 
print(u, vp = vplayout(1, 1)) 
print(v, vp = vplayout(1, 2)) 

И что-то с grid.arrange

grid.arrange(plot1, plot2, ncol=2) 

, но ни один из них не работает.

+4

Полезно? http://stackoverflow.com/questions/14124373/combine-base-and-ggplot-graphics-in-r-figure-window – rawr

+0

Да !!! Отличное сырье спасибо! – delaye

ответ

12

Способ описан в разделе Embedding base graphics plots in grid viewports раздела gridBase vignette.

Пакет gridBase содержит функции для установки чувствительных параметров для области построения участка основания. Таким образом, нам нужны эти пакеты:

library(grid) 
library(ggplot2) 
library(gridBase) 

Вот пример ggplot:

a_ggplot <- ggplot(cars, aes(speed, dist)) + geom_point() 

Хитрость, кажется, вызвать plot.new перед установкой par, в противном случае это ответственность запутаться и не правильно выполнять настройки , Вам также необходимо установить new = TRUE, чтобы новая страница не запускалась при вызове plot.

#Create figure window and layout 
plot.new() 
grid.newpage() 
pushViewport(viewport(layout = grid.layout(1, 2))) 

#Draw ggplot 
pushViewport(viewport(layout.pos.col = 1)) 
print(a_ggplot, newpage = FALSE) 
popViewport() 

#Draw bsae plot 
pushViewport(viewport(layout.pos.col = 2)) 
par(fig = gridFIG(), new = TRUE) 
with(cars, plot(speed, dist)) 
popViewport() 
+0

что такое gridFIG() ?? – Antoni

+1

@Antoni Он выравнивает координаты области рисунка базового участка в текущем окне сетки сетки. См. '? GridBase :: gridFIG'. –

+0

Не думаю, что 'grid.newpage()' необходимо. При использовании 'png' для сохранения графика он создает два png-файла, один в пустом, а другой с желаемым выходом. При удалении 'grid.newpage()' создается только один файл. –

Смежные вопросы