2015-04-22 3 views
1

Я хочу переместить легенду ggplot2 в угол, но не внутри самого сюжета. Так что он должен быть на полях все еще, но не в центре. Единственные варианты, которые я нашел, - это выбор «сверху», «справа» и т. Д. Или использование специальной координаты в пределах самого сюжета.ggplot2: Переместить легенду в угол, но сохранить ее в поле?

Так, например, принять этот образ:

Hadley Plot](http://i.imgur.com/wpuuZoZ.png)

и представьте себе, переместив легенду прямо вниз, откуда он в настоящее время находится в нижнем правом углу.

Я попытался установить положение легенды на c(12, 2), например, но он просто исчезает.

Установка его на «правильное» - это то, что представляет собой текущее изображение, но мне нужна легенда, чтобы спуститься вниз к «внизу справа».

+0

было бы приемлемо, чтобы расширить ось х до до 12 с (scale_x_continuous() и использовать это дополнительное пространство? – lawyeR

+0

Творческий, но нет. Его нужно полировать достаточно для глаз VP. – jsuprr

ответ

1

Вы можете расширить поля графика, а затем установить положение легенды где-то вне участка.

Создайте свои данные:

dat = data.frame(x=1:10, y=10:1, type=rep(c('a', 'b'), each=5)) 

Используйте plot.margin и legend.position элементы в theme. Сначала создайте unit объект с полями:

margins = unit(c(1, 4, 1, 1), 'lines') 

Затем вызовите ggplot с полями и позиции легенды.

ggplot(dat, aes(x, y, color=type)) + 
    geom_point() + 
    theme(plot.margin=margins, 
      legend.position=c(1.075, 0)) 

(Положение легенды обычно устанавливаются между 0 и 1 (с использованием нормализуется родительские координаты), а не фактические х и у координаты участка.)

+0

Я пробовал свой код. Для части поля я получаю: Ошибка: не удалось найти функцию «unit». ** EDIT **: Оказывается, вам нужно прикрепить пакет сетки к использованию команды unit. ! – jsuprr