2015-11-14 3 views
2

Я пытаюсь добавить легенду к своим графикам, но ничего не появляется. Это код, который у меня есть:ggplot legend - scale_colour_manual не работает

ggplot(main, aes(x = ceiling(session/2))) + 
geom_line(aes(y = C_overall), colour = "blue", stat = "summary", fun.y = "mean") + 
geom_line(aes(y = I_overall), colour = "red", stat = "summary", fun.y = "mean") + 
labs(title = 'Overall Accuracy', x = 'Session', y = 'Percent Accurate') + 
facet_wrap(~bird) 

Это показывает мне, чего я хочу, кроме как без легенды. Все, что я видел, говорит, чтобы использовать scale_colour_manual как это:

ggplot(main, aes(x = ceiling(session/2))) + 
geom_line(aes(y = C_overall), colour = "one", stat = "summary", fun.y = "mean") + 
geom_line(aes(y = I_overall), colour = "two", stat = "summary", fun.y = "mean") + 
labs(title = 'Overall Accuracy', x = 'Session', y = 'Percent Accurate') + 
facet_wrap(~bird) + 
scale_colour_manual(name = 'Congruency', values = c("one" = "blue", "two" = "red")) 

Это похоже на работу для всех остальных, но R просто говорит мне, что «один» является недопустимым именем цвета. Я работал над этим часами, и я нигде не приблизился к этому.

Вот некоторые из моих данных, если это полезно:

bird session C_overall I_overall 
23W  1  42.5  42.5 
23W  2  46.25  47.5 
23W  3  51.25  57.5 
23W  4  47.5  52.5 
23W  5  47.5  52.5 
23W  6  47.5  62.5 
23W  7  52.5  52.5 
23W  8  50   55 
23W  9  51.25  52.5 
23W  10  48.75  47.5 
43R  1  47.5  42.5 
43R  2  43.75  37.5 
43R  3  58.75  40 
43R  4  51.25  40 
43R  5  51.25  52.5 
43R  6  36.25  35 
43R  7  53.75  40 
43R  8  57.5  45 
43R  9  61.25  52.5 
43R  10  48.75  47.5 
57Y  1  45   67.5 
57Y  2  53.75  62.5 
57Y  3  47.5  65 
57Y  4  52.5  52.5 
57Y  5  47.5  50 
57Y  6  48.75  70 
57Y  7  66.25  72.5 
57Y  8  55   60 
57Y  9  57.5  72.5 
57Y  10  58.75  67.5 
76B  1  51.25  50 
76B  2  56.25  42.5 
76B  3  60   60 
76B  4  68.75  70 
76B  5  73.75  75 
76B  6  55   52.5 
76B  7  68.75  62.5 
76B  8  40   40 
76B  9  57.5  55 
76B  10  66.25  70 

Синяя линия должна быть «Конгруэнтной», а красная линия должна быть «Неконгруентны».

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

ответ

3

Я бы преобразовать данные в длинном формате перед построением графика:

library(reshape2) 

main <- melt(main, c("bird", "session")) 

ggplot(main, aes(x=ceiling(session/2), y=value, color=variable)) + 
    geom_line(stat="summary", fun.y="mean", size=1) + 
    labs(title="Overall Accuracy", x="Session", y="Percent Accurate") + 
    facet_wrap(~ bird) + 
    scale_color_discrete("Results", labels=c("Congruent", "Incongruent")) 

enter image description here

Будет ли эта работа для вас?

+0

Это прекрасно! На самом деле у меня есть другие столбцы в моем файле данных, которые я использую для создания других графиков. Когда я использую этот код с другими столбцами в файле данных, я получаю сообщение об ошибке «Атрибуты не идентичны между переменными измерения; они будут отброшены », а график испорчен, но когда я удалю лишние столбцы в новом документе, это сработает. Знаете ли вы, как изменить код, чтобы он использовал только столбцы C_overall и I_overall? - Прошу прощения, я не добавил, что в исходном вопросе я не знал, что это изменит ситуацию. –

+0

попытайтесь добавить все остальные столбцы, которые вы не используете на этом графике, в параметр 'id.vars'' melt() ', то есть« расплавить »(main, c (« bird »,« session »,« col1 », col2 ", ...))' –

+0

В качестве альтернативы просто ограничьте используемые столбцы, т. е. сделайте 'ggplot (main [, c (" bird "," session "," C_overall "," I_overall ")], aes (. ..)) + ... 'и так далее –

1

Внесите следующие изменения в geom_line s и scale_color_discrete, и вы хорошо пойдете.

ggplot(main, aes(x = ceiling(session/2))) + 
## changes in line below 
geom_line(aes(y = C_overall, colour = "Congruent"), stat = "summary", fun.y = "mean") + 
## changes in line below 
geom_line(aes(y = I_overall, colour = "Incongruent"), stat = "summary", fun.y = "mean") + 
labs(title = 'Overall Accuracy', x = 'Session', y = 'Percent Accurate') + 
facet_wrap(~bird) + 
# changes in line below 
scale_color_discrete("Congruency") 

+0

Это не тот вид решения, которое будет работать долговременно. Хотя это хак, который работает в этом случае, это не способ использовать 'ggplot2'. Вы хотите сопоставить эстетику с переменной в кадре данных, как указано в ответе Сергия' aes (color = variable) '. – Matt74

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