Как вы получаете ширину стержня, чтобы быть равным, и применить предложенное исправление к моим данным? - PullRequest
1 голос
/ 06 января 2020

Я пытаюсь создать гистограмму, но столбцы имеют неравномерный размер. Как нам сделать их одинаковой ширины? Я посмотрел на рекомендуемые ответы, но ты не решил проблему. Кроме того, я не смог заставить работать одно из рекомендованных «исправлений».

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

structure(list(Waterlogging = structure(c(2L, 2L, 2L, 2L, 1L, 
                                  1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 
                                  1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 
                                  1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 
                                  1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 
                                  1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 
                                  1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 
                                  1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 
                                  1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 
                                  1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 
                                  1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L), .Label = c("Non-waterlogged", 
                                                                                          "Waterlogged"), class = "factor"), shoot = c(0.37, 0.43, 0.52, 
                                                                                                                                       0.33, 1.24, 1.12, 1.28, 1.28, 0.48, 0.95, 1.35, 0.95, 1.37, 1.4, 
                                                                                                                                       1.39, 1.34, 0.67, 0.8, 1.13, 0.32, 1.34, 1.53, 1.25, 1.4, 0.58, 
                                                                                                                                       0.98, 1.46, 0.69, 1.44, 1.83, 1.65, 1.71, 1, 1.17, 1.45, 0.98, 
                                                                                                                                       1.52, 1.75, 1.63, 1.7, 0.25, 0.24, 0.91, 1.17, 1.23, 1.22, 1.26, 
                                                                                                                                       0.89, 1.54, 1.01, 1.48, 0.93, 1.2, 1.55, 1.4, 1.19, 0.9, 1.29, 
                                                                                                                                       1.43, 1.31, 1.75, 1.92, 1.63, 1.64, 1.31, 1.43, 1.77, 1.28, 1.34, 
                                                                                                                                       1.54, 1.66, 1.88, 1.29, 1.05, 1.63, 1.36, 1.9, 2.18, 2.03, 1.68, 
                                                                                                                                       1.36, 1.16, 1.77, 1.35, 0.9, 1.49, 1.41, 1.57, 1.39, 1.22, 1.39, 
                                                                                                                                       1.37, 0.94, 1.83, 1.6, 0.24, 1.71, 1.67, 1.44, 1.9, 1.98, 2.04, 
                                                                                                                                       1.64, 1.71, 1.08, 1.89, 1.19, 1.58, 1.97, 1.97, 1.87, 2.21, 1.68, 
                                                                                                                                       2, 1.75, 1.24, 2.1, 2.25, 2.1, 2.24, 0.88, 0.72, 0.3, 0.58, 1.23, 
                                                                                                                                       1.32, 1.47, 1.54, 0.4, 0.47, 0.82, 1.2, 1.38, 1.09, 1.41, 0.23, 
                                                                                                                                       0.57, 0.84, 0.54, 1.29, 1.23, 1.14, 1.63, 1.61, 0.48, 0.95, 1.01, 
                                                                                                                                       0.8, 1.42, 1.12, 1.74, 1.89, 1.58, 1.6, 0.35, 1.38, 1.4, 1.58, 
                                                                                                                                       1.71, 1.64), herb.dmg.11.DEC = c(3L, 2L, 4L, 4L, 0L, 0L, 0L, 
                                                                                                                                                                        0L, 4L, 4L, 3L, 4L, 0L, 0L, 0L, 0L, 4L, 4L, 3L, 4L, 0L, 0L, 0L, 
                                                                                                                                                                        0L, 4L, 4L, 3L, 4L, 0L, 0L, 0L, 2L, 4L, 4L, 4L, 4L, 0L, 0L, 1L, 
                                                                                                                                                                        1L, 2L, 3L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 1L, 3L, 0L, 0L, 0L, 
                                                                                                                                                                        0L, 3L, 2L, 0L, 2L, 0L, 0L, 0L, 0L, 0L, 2L, 1L, 2L, 0L, 0L, 0L, 
                                                                                                                                                                        0L, 3L, 4L, 2L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 
                                                                                                                                                                        0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 2L, 1L, 0L, 1L, 0L, 0L, 0L, 
                                                                                                                                                                        0L, 1L, 2L, 2L, 1L, 0L, 0L, 0L, 1L, 1L, 2L, 3L, 2L, 0L, 0L, 2L, 
                                                                                                                                                                        1L, 1L, 1L, 3L, 2L, 0L, 0L, 0L, 0L, 4L, 4L, 2L, 3L, 0L, 0L, 0L, 
                                                                                                                                                                        0L, 3L, 4L, 4L, 3L, 0L, 0L, 1L, 1L, 4L, 3L, 3L, 4L, 0L, 0L, 1L, 
                                                                                                                                                                        2L, 3L, 3L, 4L, 4L, 0L, 0L, 1L, 1L)), row.names = c(NA, 160L), class = "data.frame")

и вот мой код для сюжета .. ..

library(Rmisc) library(ggplot2)
tg5 <- summarySE(q, measurevar="shoot", groupvars=c("herb.dmg.11.DEC"  ,"Waterlogging"))
ggplot(tg5, aes( x = as.factor(herb.dmg.11.DEC), y = shoot, fill = Waterlogging))+
theme_bw()+geom_bar(stat = "identity", width = .6, position = "dodge",colour="black")+
geom_errorbar((aes(ymin = shoot-se, ymax = shoot+se)), size = 0.3, 
width = 0.4, position = position_dodge(.6))

Вот начальный график ....

Неровные бары

Вот моя попытка решить проблему .. ....

ggplot(tg5, aes( x = as.factor(herb.dmg.11.DEC), y = shoot, fill = Waterlogging))+theme_bw()+
geom_bar(stat = "identity", position = position_dodge2(preserve = "single"),colour="black")+
geom_errorbar((aes(ymin = shoot-se, ymax = shoot+se,width=0.4)),
position = position_dodge2(preserve = "single"))

попытка исправить

, но, как вы можете видеть в предпринятом исправлении, полосы ошибок не располагаются равномерно, а полосы для 3 и 4 не находятся в симметричном положении с другими столбцами ....

Был один ответ, который я не мог применить к своим данным, который изменяет фрейм данных ....

dat <- data.frame(a=rep(LETTERS[1:3],3),
              b=rep(letters[1:3],each=3),
              v=1:9)[-2,]
ggplot(dat, aes(x=a, y=v, colour=b)) +
geom_bar(aes(fill=b), stat="identity", position="dodge")
dat.all <- rbind(dat, cbind(expand.grid(a=levels(dat$a), b=levels(dat$b)), v=NA))
ggplot(dat.all, aes(x=a, y=v, colour=b)) +geom_bar(aes(fill=b), stat="identity", position="dodge") 

Может кто-нибудь предложить какую-нибудь помощь в применении этого окончательного решения или любого другого?

1 Ответ

1 голос
/ 06 января 2020

Я не получил summarySE для работы в моем сеансе R, но вы можете получить статистику по вашему фрейму данных, используя dplyr.

Но сначала вам нужно расширить набор данных, выполнив:

df2 <- rbind(df,cbind(expand.grid(Waterlogging = levels(df$Waterlogging), herb.dmg.11.DEC = levels(as.factor(df$herb.dmg.11.DEC)), shoot = NA)))

Затем вы можете использовать dplyr для вычисления среднего и SE вашего набора данных:

library(dplyr)
df2 <- df2 %>% 
  group_by(Waterlogging, herb.dmg.11.DEC) %>% 
  summarise(Mean = mean(shoot, na.rm = TRUE), SD = sd(shoot, na.rm = TRUE), Count = n()) %>%
  mutate(SE = SD/sqrt(Count))

# A tibble: 10 x 6
# Groups:   Waterlogging [2]
   Waterlogging    herb.dmg.11.DEC    Mean     SD Count      SE
   <fct>           <chr>             <dbl>  <dbl> <int>   <dbl>
 1 Non-waterlogged 0                 1.47   0.378    69  0.0455
 2 Non-waterlogged 1                 1.79   0.250    10  0.0792
 3 Non-waterlogged 2                 1.9    0.195     4  0.0976
 4 Non-waterlogged 3               NaN     NA         1 NA     
 5 Non-waterlogged 4               NaN     NA         1 NA     
 6 Waterlogged     0                 1.40   0.187    10  0.0591
 7 Waterlogged     1                 1.39   0.347    14  0.0928
 8 Waterlogged     2                 1.20   0.488    18  0.115 
 9 Waterlogged     3                 1.05   0.463    18  0.109 
10 Waterlogged     4                 0.758  0.324    25  0.0648

и вы можете построить его, выполнив:

library(ggplot2)
ggplot(df2,aes(x = herb.dmg.11.DEC, y = Mean, fill = Waterlogging)) +
  geom_bar(stat = "identity", position = position_dodge())+
  geom_errorbar(aes(ymin = Mean-SE, ymax = Mean+SE),size = 0.3, 
                width = 0.4, position = position_dodge(.9))

enter image description here

Это то, что вы ищете?

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