2015-09-09 6 views
5

Я просмотрел предыдущие аналогичные вопросы и (я думаю) сделал все, что было рекомендовано в них. Я все еще не получаю вывод.Добавление легенды руководства в ggplot

У меня есть куча дистрибутивов, которые я показываю на гранях графиков. Затем я рисую через них вертикальные линии, которые представляют собой различные вмешательства.

Я пытаюсь показать легенду, содержащую как цвет заливки дистрибутивов, так и цвет линии этих дополнительных строк. Насколько я могу судить, я делаю все правильно (установив команду цвета в пределах aes(), используя scale_colour_manual(), чтобы определить легенду и т. Д.). Я все еще получаю легенду о цветах заливки.

Вот мой код:

ggplot(modCosts, aes(x=cost)) + geom_density(aes(fill=group)) + theme_bw() + 
    facet_wrap(~ country, scales="free") + scale_x_continuous(label = dollar) + 
    scale_fill_brewer(palette = "RdGy", name = "Income group", labels = c("HIC" = "High income", "UMIC" = "Upper-middle income", "LIC" = "Low income")) + 
    labs(y = "Density", x = "Cost", title = "Medical costs of surgery\nActual vs. modeled") + 
    geom_vline(data = surgCosts, aes(xintercept = CS.tert.lo, color = "red4")) + 
    geom_vline(data = surgCosts, aes(xintercept = CS.tert.hi, color = "red4")) + 
    geom_vline(data = surgCosts, aes(xintercept = CS.prim.lo, color = "red4"), lty = "dashed") + 
    geom_vline(data = surgCosts, aes(xintercept = CS.prim.hi, color = "red4"), lty = "dashed") + 
    geom_vline(data = surgCosts, aes(xintercept = Lap.tert.lo, color = "deepskyblue")) + 
    geom_vline(data = surgCosts, aes(xintercept = Lap.tert.hi, color = "deepskyblue")) + 
    geom_vline(data = surgCosts, aes(xintercept = Lap.prim.lo, color = "deepskyblue"), lty = "dashed") + 
    geom_vline(data = surgCosts, aes(xintercept = Lap.prim.hi, color = "deepskyblue"), lty = "dashed") + 
    geom_vline(data = surgCosts, aes(xintercept = Fx.tert.lo, color = "yellowgreen")) + 
    geom_vline(data = surgCosts, aes(xintercept = Fx.tert.hi, color = "yellowgreen")) + 
    scale_color_manual(name = "Reported cost", values = c("red4" = "red4", "deepskyblue" = "deepskyblue", "yellowgreen" = "yellowgreen"), 
         labels = c("Int1", "Int2", "Int3")) + 
    theme(axis.ticks = element_blank(), axis.text.y = element_blank(), legend.position = "right") 

А вот выход я получаю: enter image description here

Любая помощь будет принята с благодарностью!

+0

Это было бы намного проще, если бы вы предоставили свои наборы данных, предпочтительно используя, например, 'dput (modCosts)' и 'dput (surgCosts)'. – jlhoward

+2

Существует аргумент 'show_guide = ...' для 'geom_vline (...)', который по умолчанию соответствует FALSE. – jlhoward

+1

Я бы рекомендовал свернуть все эти слои в одну единственную геометрию с использованием единого кадра данных и отобразить цветную эстетику. – joran

ответ

3

Там в show_guide=... аргумент geom_vline(...)_hline и _abline), который по умолчанию FALSE. Очевидно, мнение заключалось в том, что большую часть времени вам не хотелось бы, чтобы цвета линий отображались в легенде. Вот пример.

df <- mtcars 
library(ggplot2) 
ggp <- ggplot(df, aes(x=wt, y=mpg, fill=factor(cyl))) + 
    geom_point(shape=21, size=5)+ 
    geom_vline(data=data.frame(x=3),aes(xintercept=x, color="red"), show_guide=TRUE)+ 
    geom_vline(data=data.frame(x=4),aes(xintercept=x, color="green"), show_guide=TRUE)+ 
    geom_vline(data=data.frame(x=5),aes(xintercept=x, color="blue"), show_guide=TRUE) 

ggp +scale_color_manual("Line.Color", values=c(red="red",green="green",blue="blue"), 
        labels=paste0("Int",1:3)) 

BTW лучший способ определить масштаб, если вы настаиваете на использовании названия цветов это:

ggp +scale_color_identity("Line.Color", labels=paste0("Int",1:3), guide="legend") 

, которая производит идентичный сюжет выше.

+0

'show_guide' теперь называется' show.legend' вместо –

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