我正在尝试为ggplot创建一个主题,然后我可以将它用于我的所有图形并让它们看起来既漂亮又漂亮又统一。我想将图例从其右侧垂直居中的当前位置移动到与右侧图形顶部对齐,如下面的红色箭头所示。
我无法理解。我可以使用legend.position
将置于1>}内,但如果我执行legend.justification = c(0.0, 1.0)
它会将图例推到其绘制的区域之外并完全切断。我知道我可以通过乱搞每个图形的grobs和gtables来为每个图形单独完成它,但我不想每次绘制图形时都这样做。
无论如何使用theme
?
答案 0 :(得分:14)
似乎最终可以使用ggplot2 2.2.0
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")
)
答案 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)
答案 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"
。