How to move or position a legend in ggplot2

别来无恙 提交于 2019-11-28 07:07:36
hadley

In versions > 0.9.3 (when opts was deprecated)

theme(legend.position = "bottom")

Older version:

Unfortunately it's a bug in ggplot2 which I really really hope to fix this summer.

Update:

The bug involving opts(legend.position = "left") has been fixed using the most current version of ggplot2. In addition, version 0.9.0 saw the introduction of guide_legend and guide_colorbar which allow much finer control over the appearance and positioning of items within the legend itself. For instance, the ability specify the number of rows and columns for the legend items.

Just a few updates to these answers while I'm here. As Hadley mentioned, you can move a legend to the bottom with theme(legend.position = "bottom")

Or manually move with it theme(legend.position = c(.2,.85))

If you want the legend to be horizontal, use theme(legend.position = c(.2,.85), legend.direction = "horizontal")

You can always place the legend manually - but since the label is still stacked/vertical, it kind of looks ugly. I really hope hadley finds time to fix this :-)

p <- qplot(VarX,VarY, data=myDat, shape=Descrip) + 
opts(legend.position=c(.5,0.9),plot.margin = unit(c(6,0,0,0), "lines"))

In newer versions of ggplot2, you can use + theme(legend.position='bottom').

qplot(VarX,VarY, data=myDat, shape=Descrip) + 
  theme(legend.position='bottom')

See Cookbook for R - Legends for more legends goodness.

In response to a comment, theme_update() doesn't kick in if invoked in the middle of a ggplot (as in + theme_update(), only subsequent times. It also modifies the active theme rather than just the specific plot. So you could do this:

theme_update(legend.position='bottom')
qplot(VarX,VarY, data=myDat, shape=Descrip) 

with results as above, with the difference being that subsequent plots will also default to legend on bottom.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!