Как создать гистограмму в R с несколькими слоями по оси X - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь воспроизвести этот штриховой график в R со следующей таблицей в качестве входных данных. Есть много других сайтов, кроме CAV1, это лишь небольшой пример данных.

  Site Time Abundance   Group        STDEV
1 CAV1 DAY0  7.15e-06   X            1.968384e-06
2 CAV1 Day1  3.39e-06   X            4.934761e-07
5 CAV2 DAY0  7.15e-07   Y            8.636959e-07
6 CAV2 Day1  3.39e-07   Y            3.511951e-07

enter image description here

К сожалению, я еще не нашел кодов для установки sh нескольких значений для оси x.

ggplot(data=df, aes(x=Time, y=Abundance, fill=Site)) +
    geom_bar(stat="identity", color="black", position=position_dodge())+
    theme_minimal()

Я думаю, что некоторые модификации этого простого вызова сюжета могут помочь мне начать в правильном направлении. Любая помощь будет очень признательна.

Ответы [ 2 ]

3 голосов
/ 19 июня 2020

ИЗМЕНИТЬ : этот вопрос теперь отвечает на исходные данные вопроса и отредактированные данные вопроса.


Вы почти получили его. Вам просто нужно изменить fill aestheti c на Group и изменить аргумент position:

library(ggplot2)

# for the original question data
df <- data.frame("Site" = rep("CAV1", 8),
                 "Time" = rep(c("DAY0", "DAY1", "DAY3", "DAY7"), 2),
                 "Abundance" = c(7.15e-06, 3.39e-06, 6.04e-07, 6.39e-07,
                                 6.64e-06, 5.59e-06, 2.55e-06, 1.01e-06),
                 "Group" = c(rep("X", 4), rep("Y", 4)),
                 "STDEV" = c(1.968384e-06, 4.934761e-07, 2.004625e-07, 2.020505e-07,
                             8.636959e-07, 3.511951e-07, 3.008267e-07, 3.01e-07))

# you can use this plot to have side-by-side bars for each group for each day
ggplot(data=df, aes(x=Time, y=Abundance, fill=Group)) +
        geom_bar(stat="identity", color="black", position="dodge") +
        theme_minimal()

enter image description here

Только эти данные была одна категория сайтов, когда мы добавляем больше сайтов, мы можем фасетировать по ним:

# for the edited question data
df2 <- data.frame("Site" = c(rep("CAV1", 2), rep("CAV2", 2)),
                 "Time" = rep(c("DAY0", "DAY1"), 2),
                 "Abundance" = rep(c(7.15e-06, 3.39e-06), 2),
                 "Group" = c(rep("X", 2), rep("Y", 2)),
                 "STDEV" = c(1.968384e-06, 4.934761e-07, 8.636959e-07,  3.511951e-07))

# you can use this plot to additionally facet by the site
ggplot(data=df2, aes(x=Time, y=Abundance, fill=Group)) +
        facet_wrap(Site ~ .) +
        geom_bar(stat="identity", color="black", position="dodge") +
        theme_minimal()

enter image description here

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

# for this data
df3 <- data.frame("Site" = c(rep("CAV1", 4), rep("CAV2", 4)),
                  "Time" = rep(c("DAY0", "DAY1"), 4),
                 "Abundance" = c(7.15e-06, 3.39e-06, 6.04e-07, 6.39e-07,
                                 6.64e-06, 5.59e-06, 2.55e-06, 1.01e-06),
                 "Group" = rep(c(rep("X", 2), rep("Y", 2)), 2),
                 "STDEV" = c(1.968384e-06, 4.934761e-07, 2.004625e-07, 2.020505e-07,
                             8.636959e-07, 3.511951e-07, 3.008267e-07, 3.01e-07))

# you can use the same code
ggplot(data=df3, aes(x=Time, y=Abundance, fill=Group)) +
        facet_wrap(Site ~ .) +
        geom_bar(stat="identity", color="black", position="dodge") +
        theme_minimal()

enter image description here

1 голос
/ 19 июня 2020

Я думаю, вы могли бы использовать это:

library(ggplot2)
DF <- structure(list(Site = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L), .Label = "CAV1", class = "factor"), Time = structure(c(1L, 
2L, 3L, 4L, 1L, 2L, 3L, 4L), .Label = c("DAY0", "Day1", "Day3", 
"Day7"), class = "factor"), Abundance = c(7.15e-06, 3.39e-06, 
6.04e-07, 6.39e-07, 6.64e-06, 5.59e-06, 2.55e-06, 1.01e-06), 
    Group = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("X", 
    "Y"), class = "factor"), STDEV = c(1.968384e-06, 4.934761e-07, 
    2.004625e-07, 2.020505e-07, 8.636959e-07, 3.511951e-07, 3.008267e-07, 
    3.01e-07)), class = "data.frame", row.names = c("1", "2", 
"3", "4", "5", "6", "7", "8"))

#Plot
ggplot(data=DF, aes(x=Time, y=Abundance, fill=Group)) +
    geom_bar(stat="identity", color="black", position=position_dodge())+
    theme_minimal()+ labs(x = "CAV1")

enter image description here

...