2016-02-05 3 views
-2

Рассмотрите приведенный ниже график, который я создал с помощью кода ниже. Я хотел бы добавить легенду, которая может сказать что-то вроде «медианного» и «доверительного интервалов 90%». Я видел, что этот вопрос частично был адресован here (спасибо Roland), но когда я пытаюсь реализовать его в своем собственном коде, легенда выглядит глупо, потому что средняя линия не имеет заливки во время ленты. Есть ли способ заставить легенду выглядеть разумно, где она показывает только линию для средней линии и поле для заполнения ленты?вручную добавление легенды в ggplot с разными типами слоев

enter image description here

library(ggplot2) 
middle = data.frame(t=c(0,1,2,3),value=c(0,2,4,6)) 
ribbon = data.frame(t=c(0,1,2,3),min=c(0,0,0,0),max=c(0,4,8,12)) 
g = ggplot() 
g = g + geom_line (data=middle,aes(x=t,y=value),color='blue',size=2) 
g = g + geom_ribbon(data=ribbon,aes(x=t,ymin=min,ymax=max),alpha=.3,fill='lightblue') 
print(g) 

enter image description here

library(ggplot2) 
middle = data.frame(t=c(0,1,2,3),value=c(0,2,4,6)) 
ribbon = data.frame(t=c(0,1,2,3),min=c(0,0,0,0),max=c(0,4,8,12)) 
g = ggplot() 
g = g + geom_ribbon(data=ribbon,aes(x=t,ymin=min,ymax=max,fill="CI" ,color="CI")) 
g = g + geom_line (data=middle,aes(x=t,y=value,      color="median")) 
g = g + scale_colour_manual(values=c("lightblue","blue")) 
g = g + scale_fill_manual (values=c("lightblue")) 
print(g) 
+1

Если вы хотите легенду назначьте значения в 'color' и' 'fill' внутри aes' и использовать' 'scale_color_manual' и scale_fill_manual' указать метки и цвета. – Roland

+0

Привет, Роланд, ответ на вопрос удержания только помог. Я попытался реализовать его (см. Выше), но легенда выглядит действительно глупо. Есть ли способ заставить эту легенду выглядеть разумно? –

ответ

1

Сначала установите guide="none" для scale_fill_manual(), а затем использовать функцию guides() с аргументом override.aes= изменить linetype= и fill= по линии и доверительного интервала.

ggplot() + 
    geom_ribbon(data=ribbon,aes(x=t,ymin=min,ymax=max,fill="CI" ,color="CI")) + 
    geom_line(data=middle,aes(x=t,y=value,color="median"))+ 
    scale_colour_manual("Legend",values=c("lightblue","blue")) + 
    scale_fill_manual(values=c("lightblue"),guide="none")+ 
    guides(colour = guide_legend(override.aes = list(linetype=c(0,1),fill=c("lightblue","white")))) 

enter image description here

+0

Спасибо Didzis. Если кто-то знает более эффективный способ сделать это, это будет здорово. Похоже, что для таких графов ggplot действительно не является подходящей средой печати, просто потому, что в других средах вы можете получить легенду с помощью одной простой строки кода, а не для нескольких строк, где вам нужно указать как цвет линии и снова, цвет всего в легенде. –

Смежные вопросы