Я пытаюсь покрасить ленты в ggplot2. При использовании geom_ribbon я могу указать ymin и ymax и цвет заливки. Теперь он окрашивает все, что находится между ymin и ymax, независимо от верхнего предела или нижнего предела.ggplot2: поведение цвета цвета geom_ribbon
Пример (модифицированный из Интернета):
library("ggplot2")
# Generate data (level2 == level1)
huron <- data.frame(year = 1875:1972, level = as.vector(LakeHuron), level2 = as.vector(LakeHuron))
# Change Level2
huron[1:50,2] <- huron[1:50,2]+100
huron[50:90,2] <- huron[50:90,2]-100
h <- ggplot(huron, aes(year))
h +
geom_ribbon(aes(ymin = level, ymax = level2), fill = "grey80") +
geom_line(aes(y = level)) + geom_line(aes(y=level2))
Я хотел бы, чтобы заполнить область, где (Ymin> YMAX), с другим цветом чем где (ymin < ymax). В моих реальных данных у меня есть значения экспорта и импорта. Там, я хотел бы покрасить область, где экспорт выше, чем импорт зеленый, где импорт больше, чем экспорт. Я хочу, чтобы лента была красной.
Альтернатива: Я бы хотел, чтобы geom_ribbon заполнил область, где ymax> ymin.
Кто-нибудь знает, как это делается?
Благодарим за помощь.
Ничего себе это здорово, спасибо вам большое! Это именно то, что я хотел, поскольку я могу в принципе поставить условие в «fill =». Однако я оставлю запрос на изменение открытым, поскольку он не идеален: заливка не может быть применена идеально к точке пересечения. (На этот раз для меня не проблема). Кроме того, я все еще думаю, что логика заполнения в ggplot2 нуждается в изменении. – ManuK
Супер полезно! Есть ли способ добиться того же результата с данными в длинном формате? Так, например, с вашими данными, настроенными как: Год, Уровень (1 или 2), Значение. Я могу дойти до: h + geom_line (aes (y = Value, group = Level), но я не могу понять, как добавить слой geom_ribbon() с этой структурой. –
Не легко, я не думаю . 'ggplot2' ожидает столбцы, поэтому вам нужно иметь столбец для использования в качестве значений' ymin' и 'ymax'. Это довольно просто для' tidyr :: spread() 'ваши длинные данные в требуемый формат. –