I am arranging plots generated by ggplot2. I have to use print to print out plots and grid.draw to display legend.
Sample Code:
p0 <- ggplot(data = iris, geom = 'blank',
aes(y = Petal.Width, x = Petal.Length, color = Species)) + geom_point() +
theme(axis.title.x = element_blank(),
axis.title.y = element_blank(),
legend.position = "none")
p1 <- ggplot(data = iris, geom = 'blank',
aes(y = Petal.Length, x = Petal.Width, color = Species)) + geom_point() +
theme(axis.title.x = element_blank(),
axis.title.y = element_blank(),
legend.position = "none")
g_legend <- function(a.gplot){
tmp <- ggplot_gtable(ggplot_build(a.gplot))
leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
legend <- tmp$grobs[[leg]]
return(legend)
}
p <- ggplot(data = iris, geom = 'blank',
aes(y = Petal.Width, x = Petal.Length, color = Species)) + geom_point()
grid.newpage()
pushViewport(viewport(layout = grid.layout(2, 4)))
print(p0,vp = viewport(layout.pos.row = 1, layout.pos.col = 1))
print(p0,vp = viewport(layout.pos.row = 1, layout.pos.col = 2:3))
print(p1,vp = viewport(layout.pos.row = 2, layout.pos.col = 2:3))
grid.text("This is x label",gp=gpar(fontsize = 14), vjust = 11,
vp = viewport(layout.pos.row = 2, layout.pos.col = 2))
grid.text("This is y label",gp=gpar(fontsize = 14), vjust = -11, rot = 90,
![enter image description here][1]vp = viewport(layout.pos.row = 2, layout.pos.col = 2))
grid.draw(g_legend(p))
I would like to put the legend at the fourth column. How can I do it? Thanks.
using gridExtra
library(gridExtra)
grid.arrange(p0 , p1, g_legend(p), ncol=3,
heights=c(10, 1),widths =c(1,2,1) ,as.table =TRUE)
You can manually change the x and y coordinates in the TableGrob object. For example, you could do the following to position the legend in the center of the plot:
leg <- g_legend(p)
leg$vp$x <- unit(.5, 'npc')
leg$vp$y <- unit(.5, 'npc')
When you call grid.draw(leg), it will be positioned in the center. Use different values to put it wherever you like.
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