我正在安排ggplot2生成的情节。我必须使用print打印出plot和grid.draw来显示图例。
示例代码:
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))
我想把传说放在第四栏。我该怎么做?感谢。
答案 0 :(得分:9)
使用gridExtra
library(gridExtra)
grid.arrange(p0 , p1, g_legend(p), ncol=3,
heights=c(10, 1),widths =c(1,2,1) ,as.table =TRUE)
答案 1 :(得分:3)
您可以手动更改TableGrob对象中的x和y坐标。例如,您可以执行以下操作将图例定位在图的中心:
leg <- g_legend(p)
leg$vp$x <- unit(.5, 'npc')
leg$vp$y <- unit(.5, 'npc')
当您调用grid.draw(leg)时,它将位于中心。使用不同的值将其放在任何您喜欢的位置。
答案 2 :(得分:2)
在网格中,想法是将视口推到想要绘制的位置,
/* the slides */
.slick-slide {
margin: 0 27px;
}
/* the parent */
.slick-list {
margin: 0 -27px;
}
或者,将视口指定给图例grob,
pushViewport(viewport(layout.pos.row = 2, layout.pos.col = 4))
grid.draw(g_legend(p))