2017-02-16 14 views
0

Пожалуйста, рассмотрим следующий сценарий R (взятый и слегка измененный от here):ggplot2: Как добавить разрыв строки в горизонтальной легенды

require(ggplot2) 

x <- 1:10 
y <- jitter(x^2) 

DF <- data.frame(x, y) 

p <- ggplot(DF, aes(x = x, y = y)) + geom_point() + 
    stat_smooth(method = 'lm', aes(colour = 'linear')) + 
    stat_smooth(method = 'lm', formula = y ~ poly(x,2), 
       aes(colour = 'polynomial')) + 
    stat_smooth(method = 'nls', formula = y ~ a * log(x) +b, 
       aes(colour = 'logarithmic')) + 
    stat_smooth(method = 'nls', formula = y ~ a*exp(b *x), 
       aes(colour = 'Exponential')) + 
    theme(legend.position = "top") 

p <- p + guides(guide_legend(ncol=2,nrow=2,byrow=TRUE)) 


p 

Легенда отображается в верхней части участка. Я хочу разбить эту легенду на две строки с двумя клавишами в каждой строке. Это возможно?

Пожалуйста, обратите внимание, что, как вы видите, я уже пробовал

p+guides(guide_legend(ncol=2,nrow=2,byrow=TRUE)) 

, как было предложено here и here, но он не работает для меня. Это предложение в основном отображает данные и легенды линейных и полиномиальных моделей и полностью скрывает логарифмические и экспоненциальные модели.

+1

Необходимо указать, какая легенда, в данном случае легенда 'colour':' guide (color = guide_legend (ncol = 2, nrow = 2, byrow = TRUE)) '. Тем не менее, когда я запускаю ваш код, 'stat_smooth' терпит неудачу для моделей' nls', поэтому создается пространство для второй строки легенды, но для моделей 'nls' фактически не отображаются поля легенды. – eipi10

+0

@ eipi10 это действительно работает; спасибо, но что, если у меня есть нечетное количество ключей, и я хочу, чтобы каждая строка легенды была выровнена по центру горизонтально. Это возможно? – user8420488483439

ответ

0

Как пояснил eipi10,

Вы должны указать, какие легенды, в этом случае цвет легенда: guides(colour=guide_legend(ncol=2,nrow=2,byrow=TRUE)).

Чтобы уточнить, эстетическое является определение colour каждой строки. Если использовались fill, линия могла быть guides(fill=guide_legend(ncol=2,nrow=2,byrow=TRUE)).