2014-02-18 42 views
6

我有2個曲線圖,地圖繪製與ggplot2這樣的:ř放在一起傳統情節和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() 

和的曲線圖作爲來自classIntclassIntervals類型的對象。

我想把這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

是的!大rawr謝謝! – delaye

回答

12

該方法在gridBase vignetteEmbedding base graphics plots in grid viewports部分進行了描述。

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()'時,只創建一個文件。 –