是否可以将图例定位在R中ggplot的右上角?

时间:2014-08-15 14:04:11

标签: r ggplot2

我正在尝试为ggplot创建一个主题,然后我可以将它用于我的所有图形并让它们看起来既漂亮又漂亮又统一。我想将图例从其右侧垂直居中的当前位置移动到与右侧图形顶部对齐,如下面的红色箭头所示。

Desired legend movement

我无法理解。我可以使用legend.position置于}内,但如果我执行legend.justification = c(0.0, 1.0)它会将图例推到其绘制的区域之外并完全切断。我知道我可以通过乱搞每个图形的grobs和gtables来为每个图形单独完成它,但我不想每次绘制图形时都这样做。

无论如何使用theme

执行此操作

4 个答案:

答案 0 :(得分:14)

似乎最终可以使用ggplot2 2.2.0

enter image description here

library(ggplot2)
ggplot(mpg, aes(displ, hwy, colour=fl)) + 
  geom_point() + 
  theme(legend.justification = "top")

答案 1 :(得分:5)

尝试使用主题选项进行试验,尤其是

  • legend.key.width
  • plot.margin

试试这个:

library(ggplot2)

ggplot(iris, aes(Sepal.Length, Sepal.Width, col=Species)) + 
    geom_point() + 
    theme(
        legend.position=c(1,1), 
        legend.justification=c(0, 1), 
        legend.key.width=unit(1, "lines"), 
        plot.margin = unit(c(1, 5, 0.5, 0.5), "lines")
    )

enter image description here

答案 2 :(得分:3)

library(ggplot2)

p <- ggplot(iris, aes(Sepal.Length, Sepal.Width, col=Species)) + 
  geom_point() +
  theme(legend.background = element_rect(colour = "black", size = 0.5),
        panel.background = element_rect(colour = "black", size = 0.5))

g <- ggplotGrob(p)

leg <- g$grobs[[8]]
leg$heights[3] <- unit(1,"null")
leg$heights[1] <- unit(0,"null")
# grid.newpage()
# grid.draw(leg)
g$grobs[[8]] <- leg
grid.newpage()
grid.draw(g)

enter image description here

答案 3 :(得分:0)

我发现的最简单的黑客是

ggplot(data.frame(x=1:3, y=1:3), aes(x=x, y=y, colour=x)) + geom_point() + 
  theme(plot.margin=unit(c(5,5,1,1),"cm"), legend.position=c(1.1, 1.1))

您也可以使用legend.justification参数进行设置,例如到"top"enter image description here