Почему легенда ggplot показывает параметр "color"? - PullRequest
6 голосов
/ 19 января 2011

У меня есть следующий пример:

data <- structure(list(a = c(-1.25549186262767, -0.840855480786298, -
0.635371312524283, 
-0.602907981454667, -0.472166385166945, -0.285773634866154, 0.0701427664273268, 
0.138108224803923, 1.38435934347858, 1.71144087270237), b = c(-3.44400412039417, 
0.675644682353751, -1.04793816522475, -7.38303347186651, 2.34519166466874, 
0.334780748573386, 4.76806919070976, 4.8633533150074, 3.50106026731172, 
-1.27172351054143), c = c(-3.02376206439776, -2.56390769080574, 
-1.48659913867609, -1.27976202274701, -0.368725655874139, 1.08537150160227, 
3.98619381956471, 4.50687017428731, 4.10341582203292, -1.61769414438858
), d = c(5.71851494232005, 2.90539833491649, 2.75195159216204, 
2.73478241733301, 2.65941820902101, 2.60630235726839, 3.34836154776286, 
3.62938300664006, 4.61153521538016, 5.56230567213863), e = c(8.98703236551896, 
4.5660296657415, 4.32487774825464, 4.29789523068949, 4.17945528847841, 
4.09598014088541, 5.26217626511884, 5.70382046327322, 7.24733897758039, 
8.74153894964533)), .Names = c("a", "b", "c", "d", "e"), row.names = c(NA, 
-10L), class = "data.frame")

ggplot(data, aes(x=a, y=b)) + geom_point() + 
    geom_line(aes(x=a, y=c)) + 
    geom_line(aes(x=a, y=(c - d), colour="red")) +
    geom_line(aes(x=a, y=(c + d), colour="red")) +
    geom_line(aes(x=a, y=(c - e), colour="blue")) +
    geom_line(aes(x=a, y=(c + e), colour="blue")) 

Я хочу, чтобы метки были "d" и "e", но вместо этого им присваивается значение поля "color".Два вопроса:

1) Как я могу полностью исключить легенду?2) Если я хочу включить легенду, как я могу установить для нее определенные значения, а не цвет?

Ответы [ 3 ]

8 голосов
/ 19 января 2011

Важно помнить, что элементы внутри aes() будут отображать данные в эстетику. Если вы устанавливаете постоянные значения, вы можете переместить эту информацию за пределы aes(). Небольшая модификация вашего кода дает:

ggplot(data, aes(x=a, y=b)) + geom_point() + 
geom_line(aes(x=a, y=c)) + 
geom_line(aes(x=a, y=(c - d)), colour="red") +
geom_line(aes(x=a, y=(c + d)), colour="red") +
geom_line(aes(x=a, y=(c - e)), colour="blue") +
geom_line(aes(x=a, y=(c + e)), colour="blue") 

Что дает вам то, что вы ищете без какой-либо легенды. Мне нравится подход @ koshke для включения легенды выше, поэтому не буду дублировать это. Другой подход, который вы могли бы использовать, - это выполнить ваши манипуляции с данными вне вызова ggplot2(), а затем melt() в длинном формате перед построением графика. Это сократило бы ваш вызов до ggplot(), так как вы могли бы избавиться от нескольких вызовов на geom_line(), но очевидно, что есть дополнительная нагрузка при предварительной обработке данных. Вероятно, 6 в одном, 1/2 дюжины в другом для этой проблемы, но что-то нужно помнить для будущих проблем.

5 голосов
/ 19 января 2011

это то, что вы хотите сделать?

ggplot(data, aes(x=a, y=b)) + geom_point() + 
    geom_line(aes(x=a, y=c)) + 
    geom_line(aes(x=a, y=(c - d), colour="d")) +
    geom_line(aes(x=a, y=(c + d), colour="d")) +
    geom_line(aes(x=a, y=(c - e), colour="e")) +
    geom_line(aes(x=a, y=(c + e), colour="e")) +
    scale_colour_manual(name="legend title", 
                        values=c("red", "blue"),
                        breaks=c("d", "e"))
2 голосов
/ 19 января 2011

Устранение метки может быть сделано путем добавления опции + opts(legend.position = "none").

...