Как переместить или расположить легенду в ggplot2 - PullRequest
58 голосов
/ 02 июня 2010

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

В книге ggplot2 говорится на стр. 112 «Положение и обоснование легенд контролируются настройкой темы legend.position, а значение может быть правым, левым, верхним, нижним, нет (без легенды) или числовым ».

Следующий код работает (так как "right" это значение по умолчанию), и он также работает с "none" в качестве положения легенды, но "left", "top", "bottom", все завершается ошибкой с "Ошибка в grid.Call.graphics ("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 ]

57 голосов
/ 02 июня 2010

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

theme(legend.position = "bottom")

Старая версия:

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

Обновление:

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

4 голосов
/ 17 августа 2018

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

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

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

3 голосов
/ 03 июня 2010

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

p <- qplot(VarX,VarY, data=myDat, shape=Descrip) + 
opts(legend.position=c(.5,0.9),plot.margin = unit(c(6,0,0,0), "lines"))
2 голосов
/ 22 августа 2017

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

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

enter image description here

См. Поваренная книга для R - Легенды , чтобы узнать больше о легендах.

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

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

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

...