geom_point не принимает 0 в качестве значения - PullRequest
2 голосов
/ 19 июня 2020

Я пытаюсь создать график, показывающий измеренные значения со средним значением и 95% доверительным интервалом для данной группы среди точек. R продолжает говорить мне, что он удалил строки со значением 0, и поэтому остальные точки отключены.

Код, который я использую:

data.summary <- data %>%
  group_by(condition, conc) %>%
  summarise(
    sd = sd(score, na.rm = TRUE),
    score = mean(score))    
ggplot(data, aes(condition, score, color=concentration)) +
      geom_jitter(aes(color=conc),position = position_jitter(0.2)) + 
      expand_limits(x = 0, y = 0) +
      scale_color_manual("Conc",breaks = c("4", "5", "6", "7"), 
                         values=c("sienna1", "dodgerblue1", "green1", "deeppink1"))+
      new_scale("color")+
      geom_pointrange(aes(ymin = score-sd, ymax = score+sd, color=conc),data = data.summary) +
      expand_limits(x = 0, y = 0) +
       scale_color_manual("Conc",breaks = c("4", "5", "6"), 
                         values=c("sienna4", "dodgerblue4", "green4", "deeppink4")) +
      ggtitle("Data")

Данные (формат dput):

structure(list(hydra = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 
8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L, 4L, 5L, 
6L, 7L, 8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L, 
4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L), 
    time = c(72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 
    72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 
    72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 
    72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 
    72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 
    72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 72L, 
    72L, 72L), condition = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 
    4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 
    4L, 4L, 4L, 4L, 4L, 4L), .Label = c("Control Bisection", 
    "Control Decapitation", "Treatment Bisection", "Treatment Decapitation"
    ), class = "factor"), conc = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 4L, 4L, 4L, 4L, 
    4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 
    5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
    5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
    6L, 6L, 6L, 6L, 6L), score = c(9L, 10L, 9L, 7L, 10L, 9L, 
    9L, 9L, 10L, 9L, 9L, 10L, 6L, 9L, 10L, 10L, 10L, 9L, 2L, 
    0L, 3L, 0L, 0L, 5L, 0L, 0L, 0L, 7L, 5L, 4L, 3L, 3L, 3L, 4L, 
    5L, 3L, 0L, 0L, 0L, 0L, 3L, 0L, 2L, 0L, 2L, 0L, 4L, 2L, 3L, 
    0L, 7L, 5L, 3L, 4L, 0L, 5L, 3L, 4L, 2L, 0L, 4L, 0L, 4L, 4L, 
    4L, 3L, 5L, 2L, 3L, 4L, 5L, 4L)), class = "data.frame", row.names = c(NA, 
-72L))

Вот как должны выглядеть данные по сравнению с тем, что я получаю

What I should see What I see

Ответы [ 2 ]

2 голосов
/ 20 июня 2020

В вашем коде есть несколько вещей, которые не работают должным образом, но я думаю, что основная проблема заключается в том, что в этой строке:

scale_color_manual("Conc",breaks = c("4", "5", "6", "7"), 
            values=c("sienna1", "dodgerblue1", "green1", "deeppink1"))

вы не указали значение, что делать если концентрация равна нулю. Это работает (я не думаю, что вам действительно нужны черные точки, но вы можете изменить первый цвет, как хотите):

brkvec <- as.character(c(0, 4:7)
colvec <- c("black","sienna1", "dodgerblue1", "green1", "deeppink1")
scale_color_manual("Conc",breaks = brkvec, values = colvec)
0 голосов
/ 20 июня 2020

Привет, спасибо @Ben, но вы можете найти это проще ...

library(ggplot2)

mydata$conc <-  factor(mydata$conc)


brkvec <- as.character(c(0, 4:7))
colvec <- c("black","sienna1", "dodgerblue1", "green1", "deeppink1")

ggplot(mydata, aes(condition, score, color=conc)) +
  geom_jitter(aes(color=conc),position = position_jitter(0.2)) +
  expand_limits(x = 0, 
                y = 0) +
  geom_pointrange(aes(ymin = score - sd(score, na.rm = TRUE), 
                      ymax = score + sd(score, na.rm = TRUE))) +
  expand_limits(x = 0, y = 0) +
  scale_color_manual("Conc", breaks = brkvec, values = colvec) +
  ggtitle("Data")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...