Как перемещать или позиционировать легенду в ggplot2
Я пытаюсь создать участок ggplot2 с легендой ниже сюжета.
Книга ggplot2 говорит на стр. 112 "Положение и обоснование легенд контролируются установкой legend.position, а значение может быть правым, левым, верхним, нижним, ни одним (без легенды) или числовой позицией".
Следующий код работает (поскольку "правый" он по умолчанию), и он также работает с "none" в качестве положения легенды, но "слева", "сверху", "снизу", все сбой "с ошибкой" 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")
Что я делаю неправильно? Повторное позиционирование легенды должно быть невероятно распространено, поэтому я считаю это.
Ответы
Ответ 1
В версиях > 0.9.3 (когда opts
устарел)
theme(legend.position = "bottom")
Старая версия:
К сожалению, это ошибка в ggplot2, которую я действительно очень надеюсь исправить этим летом.
Update:
Ошибка, связанная с opts(legend.position = "left")
, была исправлена с использованием самой последней версии ggplot2. Кроме того, в версии 0.9.0 появилась версия guide_legend
и guide_colorbar
, которая позволяет намного более тонко контролировать внешний вид и позиционирование элементов внутри самой легенды. Например, способность указывает количество строк и столбцов для элементов легенды.
Ответ 2
Вы всегда можете поместить легенду вручную - но поскольку метка все еще сложена/вертикальна, это выглядит некрасиво. Я действительно надеюсь, что hadley найдет время, чтобы исправить это: -)
p <- qplot(VarX,VarY, data=myDat, shape=Descrip) +
opts(legend.position=c(.5,0.9),plot.margin = unit(c(6,0,0,0), "lines"))
Ответ 3
В новых версиях ggplot2
вы можете использовать + theme(legend.position='bottom')
.
qplot(VarX,VarY, data=myDat, shape=Descrip) +
theme(legend.position='bottom')
![введите описание изображения здесь]()
Смотрите Поваренная книга для R - Легенды для большей пользы легенд.
В ответ на комментарий theme_update()
не срабатывает, если он вызван в середине ggplot (как в + theme_update()
, только в последующие моменты времени, а также изменяет активную тему, а не только конкретный график. вы можете сделать это:
theme_update(legend.position='bottom')
qplot(VarX,VarY, data=myDat, shape=Descrip)
с результатами, как указано выше, с той разницей, что последующие графики также по умолчанию будут иметь легенду внизу.