гранение, основанное на geom_point, когда ggplot () пусто и существует несколько затененных geom_rect - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь закрасить несколько областей интереса на точечной диаграмме. Основываясь на этом ответе , я считаю, что я вынужден оставить начальный ggplot() вызов пустым и выполнить вызовы geom_rect() до вызова geom_point(). Я получил все это на работу. Однако я не могу применить фасет на основе данных, переданных в geom_point().

Следующие данные корректно отображают мои данные (точечные диаграммы для красных и синих областей разных размеров):

ggplot() + 
geom_rect(aes(xmin=885, xmax=1544, ymin=-Inf, ymax=Inf), alpha=.2, fill = "red") +
geom_rect(aes(xmin=1858, xmax=2580, ymin=-Inf, ymax=Inf), alpha=.2, fill = "blue") +
geom_point(data=df, aes(x=Position, y=Max_Freq))

Однако все следующие ошибки приводят к следующим ошибкам:

+ facet_wrap(~Replicate)
#Error in if (empty(data)) { : missing value where TRUE/FALSE needed

+ facet_wrap(data~Replicate)
#Error in combine_vars(data, params$plot_env, rows, drop = params$drop):
#  At least one layer must contain all variables used for facetting

+ facet_wrap(data$Replicate)
#Error in data$Replicate : object of type 'closure' is not subsettable

На других графиках, когда в вызове ggplot() указывается df (т. Е. ggplot(df, aes(x=Position, y=Max_Freq)), первая опция правильно корректирует данные. Правда, я не очень хорошо разбираюсь в R, но, похоже, у этого должно быть простое решение.

1 Ответ

0 голосов
/ 29 июня 2018

Один из подходов заключается в создании фрейма данных с прямоугольными координатами, который также будет иметь переменную фасета. Пример:

некоторые данные:

df <- data.frame(x = rnorm(20),
                 y = runif(20),
                 facet = sample(c("A", "B"),
                                20,
                                replace = TRUE))

создать фрейм данных с geom_rect координатами:

rect1 <- data.frame(xmin = -1,
                    xmax = 1,
                    ymin = -Inf,
                    ymax = Inf,
                    facet = c("A", "B"))

Сюжет:

ggplot() + 
  geom_rect(data = rect1 , aes(xmin = xmin,
                               xmax = xmax,
                               ymin = ymin,
                               ymax = ymax),
            alpha = 0.2, fill = "blue") +
  geom_point(data = df, aes(x = x, y = y))+
  facet_wrap(~facet)

enter image description here

Это позволяет индивидуально настраивать прямоугольники. Пример:

rect2 <- data.frame(xmin = c(-1, 0),
                    xmax = c(0, 2),
                    ymin = c(-Inf, 0.25),
                    ymax = Inf,
                    facet = c("A", "B"))

ggplot() + 
  geom_rect(data = rect2 , aes(xmin = xmin,
                               xmax = xmax,
                               ymin = ymin,
                               ymax = ymax,
                               fill = facet),
            alpha = 0.2) +
  geom_point(data = df, aes(x = x, y = y))+
  facet_wrap(~facet)

enter image description here

или просто нанести прямоугольники на некоторые грани:

rect3 <- data.frame(xmin = -1,
                    xmax = 0, 
                    ymin = 0.25,
                    ymax = Inf,
                    facet = "A")

enter image description here

...