I have 2 graphs, a map plotted with ggplot2
like this:
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()
and a graph as object of type classIntervals
from the classInt
library.
I would like to put together this 2 graphs. I have tried:
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))
And something with grid.arrange
grid.arrange(plot1, plot2, ncol=2)
but none of these work.
The method is described in the Embedding base graphics plots in grid viewports
section of the gridBase
vignette.
The gridBase
package contains functions to set sensible parameters for the plotting region of the base plot. So we need these packages:
library(grid)
library(ggplot2)
library(gridBase)
Here's an example ggplot:
a_ggplot <- ggplot(cars, aes(speed, dist)) + geom_point()
The trick seems to be to call plot.new
before you set par
, otherwise it's liable to get confused and not correctly honour the settings. You also need to set new = TRUE
so a new page isn't started when you call 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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With