Подтвердить что ты не робот

Как перемещать или позиционировать легенду в 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")

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

4b9b3361

Ответ 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) 

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