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