Как переместить или расположить легенду в 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')
посмотреть Поваренная книга для 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")