R / ggplot2: как сопоставить цвета легенды и сюжета на перекрывающихся участках? - PullRequest
4 голосов
/ 13 февраля 2011

У меня есть два графика площади (назовите их «синий» и «зеленый»), где green в основном находится под графиком blue, но в очень немногих точках он выше, чем график blue.Я хочу использовать прозрачность, скажем, alpha = 0.2 для обоих, а также иметь возможность указать цвета для каждого.Моя проблема сейчас в том, что, поскольку график green в основном находится под графиком blue, его область в основном имеет смешанный цвет blue + green = некоторый другой цвет, и только в несколькихместами показывает свой «истинный» зеленый цвет.Однако легенда 1012 *, конечно, показывает график blue, отображенный на синем, а график green, отображенный на зеленом.Проблема в том, что когда кто-то смотрит на график, он будет сбит с толку, поскольку график green в основном выглядит не зеленым (потому что большую часть времени он перекрывается синим).

Вот мой код (супер упрощенная версиямоего настоящего приложения).

df <- data.frame( date = 1:5, blue = 10, green = c(1,5,11,5,1))
df.m <- melt( df, id = 'date', variable_name = 'type' )
df.m$type <- ordered( df.m$type, c('green', 'blue'))

ggplot(df.m, aes(date,value)) +
  geom_area( aes(fill = type),  position = 'identity', alpha = 0.2) +
  scale_fill_manual ( values = c('green', 'blue') )

enter image description here

Как видите, «истинно зеленая» область зеленого графика очень мала, поэтому цвет легенды для green не соответствует большинству green сюжета.Это, конечно, правильное поведение по дизайну, но мне интересно, есть ли какой-нибудь способ, которым я могу получить цвет легенды для green и перекрывающийся цвет blue+green, чтобы соответствовать.Я попытался преобразовать переменную blue в blue - green, а затем сделать графики области с накоплением position = "stack").Это почти работает, но не вполне удовлетворительно, потому что цвет дат, когда новая переменная blue является отрицательной, выглядит странно.

Существуют ли другие способы получить цвет легенды для green и цвет области "перекрывающихся сине-зеленых", чтобы соответствовать?Может быть, способ напрямую указать цвет легенды?Любая помощь приветствуется!

1 Ответ

2 голосов
/ 13 февраля 2011

Я не думаю, что определение пользовательских цветов в легенде возможно простым вызовом в ggplot2, но если вы настаиваете на указании цветов, вы можете нарисовать график без легенды с помощью opts(legend.position = "none") и прикрепить отдельную легенду с помощьюнапример.используя сетку видового экрана.Пакет gridExtra также может быть отличным ресурсом для последней задачи.

...