Сгруппированный боксплот ggplot2 не разделяет группы в разные моменты времени - PullRequest
1 голос
/ 08 марта 2020

У меня есть простой набор данных с двумя группами и значением для каждой группы в 4 разных временных точках. Я хочу отображать этот набор данных в виде сгруппированных коробочных диаграмм с течением времени, но ggplot2 не разделяет временные точки.

Это мои данные:

 matrix
    Replicate Line Day Treatment  X A WT     Marker Proportion
            1    C  10       low NA      HuCHuD_Pos       8.62
            2    C  10       low NA      HuCHuD_Pos         NA
            1    C  18       low NA      HuCHuD_Pos      30.50                                                    
            3    C  18       low NA      HuCHuD_Pos         NA
            2    C  18       low NA      HuCHuD_Pos         NA
            1    C  50       low NA      HuCHuD_Pos      26.10
            2    C  50       low NA      HuCHuD_Pos      31.90
            1    C  80       low NA      HuCHuD_Pos      12.70
            2    C  80       low NA      HuCHuD_Pos      26.20
            1    C  10    normal NA      HuCHuD_Pos         NA
            2    C  10    normal NA      HuCHuD_Pos      17.20
            1    C  18    normal NA      HuCHuD_Pos       3.96
            2    C  18    normal NA      HuCHuD_Pos         NA
            1    C  50    normal NA      HuCHuD_Pos      25.60
            2    C  50    normal NA      HuCHuD_Pos      17.50
            1    C  80    normal NA      HuCHuD_Pos      19.00
           NA    C  80    normal NA      HuCHuD_Pos         NA

А это мой код:

matrix = as.data.frame(subset(data.long, Line == line_single & Marker == marker_single & Day != "30"))

pdf(paste(line_name_single, marker_name_single, ".pdf"), width=10, height=10)
plot <- 
ggplot(data=matrix,aes(x=Day, y=Proportion, group=Treatment, fill=Treatment)) +
geom_boxplot(position=position_dodge(1))   
print(plot)
dev.off()

Что я делаю не так?

Что я хочу

Что я получаю

Большое спасибо за вашу помощь!

Приветствия, Паула

1 Ответ

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

Редактировать:

Вот как минимальный воспроизводимый пример для вашего вопроса может выглядеть так:

matrix <- structure(list(Day = c(10L, 10L, 18L, 18L, 18L, 50L, 50L, 80L, 80L, 10L, 10L, 18L, 18L, 50L, 50L, 80L, 80L),
                         Treatment = c("low", "low", "low", "low", "low", "low", "low", "low", "low", "normal", "normal", "normal", "normal", "normal", "normal", "normal", "normal"), 
                         Proportion = c(8.62, NA, 30.5, NA, NA, 26.1, 31.9, 12.7, 26.2, NA, 17.2, 3.96, NA, 25.6, 17.5, 19, NA)),
                    class = "data.frame", row.names = c(NA, -17L))

Предлагаемый ответ с использованием factor для «дискретизации» переменная Day:

ggplot(data=matrix,aes(x=factor(Day), y=Proportion,  fill=Treatment)) +
  geom_boxplot(position=position_dodge(1)) +
  labs(x ="Day")

enter image description here

Объяснение: Если мы передадим непрерывную переменную оси 'x' для блок-графика, ggplot2 не преобразует ось в дискретную переменную. Следовательно, при отсутствии переменной группировки мы получаем только один блок. Но если мы преобразуем переменную в нечто дискретное , например, в множитель, строку или дату, мы получим желаемое поведение.

Кроме того, когда вы используете dput или один из описанные методы здесь гораздо проще найти и протестировать ответ, чем пытаться работать с описанием данных, как в вопросе (или, по крайней мере, я не мог понять, как загрузить эти примеры данных)

PS Я думаю, что немного странно называть переменную класса data.frame 'matrix', поскольку matrix - это собственный тип данных в R ...;)

...