Как переместить или расположить легенду в ggplot2

Я пытаюсь создать сюжет ggplot2 с легендой под сюжет.

в книге ggplot2 говорится на стр. 112 " положение и обоснование легенд контролируются легендой настройки темы.позиция, и значение может быть правым, левым, верхним, нижним, none (без легенды) или числовой позицией".

следующий код работает (так как "right" по умолчанию), и он также работает с" none "в качестве позиции легенды, но "left", "top"," bottom", все терпят неудачу с " Error в Grid.Вызов.графика ("L_setviewport", pvp, TRUE): небесконечное расположение и/или размер окна просмотра"

library(ggplot2)
(myDat <- data.frame(cbind(VarX=10:1, VarY=runif(10)), 
    Descrip=sample(LETTERS[1:3], 10, replace=TRUE)))
qplot(VarX,VarY, data=myDat, shape=Descrip) + 
    opts(legend.position="right")

что я делаю не так? Перестановка легенды должна быть невероятно распространенной, поэтому я думаю, что это я.

4 ответов


в версиях > 0.9.3 (когда opts устарел)

theme(legend.position = "bottom")

версия:

к сожалению, это ошибка в ggplot2, которую я очень надеюсь исправить этим летом.

обновление:

ошибка с участием opts(legend.position = "left") исправлено с использованием самой последней версии ggplot2. Кроме того, версия 0.9.0 увидела введение guide_legend и guide_colorbar, которые позволяют гораздо более точный контроль над внешним видом и позиционированием элементов внутри самой легенды. Например, возможность указать количество строк и столбцов для элементов легенды.


вы всегда можете разместить легенду вручную, но поскольку метка по-прежнему сложена/вертикально, она выглядит уродливо. Я очень надеюсь, что Хэдли найдет время, чтобы исправить это: -)

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

в более новых версиях ggplot2, вы можете использовать + theme(legend.position='bottom').

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

enter image description here

посмотреть Поваренная книга для R-Legends для более легенд добра.

в ответ на комментарий theme_update() не срабатывает, если вызывается в середине ggplot (как в + theme_update(), только в последующие разы. Он также изменяет активную тему, а не только конкретный сюжет. Так что вы могли бы сделать это:

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

С результатами выше, с той разницей, что последующие графики также будут по умолчанию иметь легенду внизу.


просто несколько обновлений этих ответов, пока я здесь. Как упоминал Хэдли, вы можете переместить легенду на дно с помощью theme(legend.position = "bottom")

или вручную переместить с ним theme(legend.position = c(.2,.85))

Если вы хотите, чтобы легенда была горизонтальной, используйте theme(legend.position = c(.2,.85), legend.direction = "horizontal")