Добавление цветных прямоугольников на график титрования - PullRequest
2 голосов
/ 19 марта 2020

У меня есть фрейм данных с кривой титрования pH, функция объема. Я хотел бы поместить два цветных / затененных горизонтальных прямоугольника, чтобы показать диапазон pH двух индикаторов, метилового оранжевого (3,2

. Вот воспроизводимый пример:

Volume <- c(1:5)
pH <- c(3,4,9,10,12)
df <- data.frame(Volume,pH)
ggplot(df,aes(x=Volume,y=pH))+geom_line(color="purple")+
  geom_rect(aes(ymin=3.2,ymax=4.4,xmin=-Inf,xmax=Inf))+
  geom_rect(aes(ymin=8.2,ymax=10,xmin=-Inf,xmax=Inf))+
  scale_fill_manual(values = alpha(c("orange", "pink"),alpha = .3))

, который дает мне такой результат:

titration curve

Как эти прямоугольники могут быть оранжевыми, розовыми и затененными?

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Попробуйте это:

Volume <- c(1:5)
pH <- c(3,4,9,10,12)
df <- data.frame(Volume,pH)
ggplot(df,aes(x=Volume,y=pH))+geom_line(color="purple")+
  geom_rect(aes(ymin=3.2,ymax=4.4,xmin=-Inf,xmax=Inf), fill="orange", alpha=.3)+
  geom_rect(aes(ymin=8.2,ymax=10,xmin=-Inf,xmax=Inf), fill="pink", alpha=.3)
0 голосов
/ 19 марта 2020

Когда что-то не работает, часто возникает проблема ссылки на неправильные данные или эстетику c в ваших geom_... вызовах.

Старайтесь быть очень явными при вызове вашего geom. Ниже я создаю явный фрейм данных для ваших прямоугольников. Вам следует явно вызвать эти данные, а также добавить inherit.aes = FALSE, чтобы он не пытался прочитать эстетику c из основного вызова ggpolt.

library(tidyverse)

mydf <- data.frame(Volume = c(1:5), pH = c(3, 4, 9, 10, 12))

ann_rect <- bind_rows(
  data.frame(ymin = 3.2, ymax = 4.4, xmin = -Inf, xmax = Inf, fill = "orange"),
  data.frame(ymin = 8.2, ymax = 10, xmin = -Inf, xmax = Inf, fill = "pink")
)

ggplot(mydf, aes(x = Volume, y = pH)) +
  geom_rect(
    inherit.aes = FALSE,
    data = ann_rect,
    aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, fill = fill)
  ) +
  geom_line(color = "purple") +
  scale_fill_identity()

В качестве альтернативы, оставьте основной вызов пустым и явно ссылайтесь на данные в каждом вызове geom.


ggplot() +
  geom_rect(data = ann_rect, aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, fill = fill)) +
  geom_line(data = mydf, aes(x = Volume, y = pH), color = "purple") +
  scale_fill_identity()

Создано в 2020-03-19 пакетом Представить (v0.3.0)

...