Как включить SE вместо SD в столбцы ошибок гистограммы? Кроме того, как я могу изменить порядок моих групп по оси X - PullRequest
2 голосов
/ 02 апреля 2020

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

1) Я надеялся использовать стандартные полосы ошибок вместо моих стандартных отклонений. Я не уверен, как включить его в мой существующий код. Мой текущий вывод ggplot выглядит следующим образом:

 data_summary <- function(data, varname, groupnames){
  require(plyr)
  summary_func <- function(x, col){
    c(mean = mean(x[[col]], na.rm=TRUE),
      sd = sd(x[[col]], na.rm=TRUE),)
  }
  data_sum<-ddply(data, groupnames, .fun=summary_func,
                  varname)
  data_sum <- rename(data_sum, c("mean" = varname))
  return(data_sum)
}

df4 <- data_summary(mydata_bc, varname="Time", 
                    groupnames=c("Group", "Behaviour"))

p <- ggplot(df4, aes(x=Behaviour, y=Time, fill=Group)) + 
  geom_bar(stat="identity", position=position_dodge()) +
  geom_errorbar(aes(ymin=Time-sd, ymax=Time+sd), width=.2,
                position=position_dodge(0.9))

2) Я также надеялся изменить порядок своего поведения на оси x.

Любая помощь будет принята с благодарностью.

Текущая гистограмма Current bar chart

Мои данные CSV: https://drive.google.com/file/d/1UWJoluv3MWwXoQg2zcDORDJiWuIA8j4f/view?usp=sharing

1 Ответ

0 голосов
/ 02 апреля 2020

Я заменил:

sd = sd(x[[col]], na.rm=TRUE)

На:

se = sd(x[[col]], na.rm=TRUE) / sqrt(sum(!is.na(x[[col]])))

Что представляет собой SD, разделенное на квадрат root длины.

Был также дополнительная запятая в вашей функции data_summary.

Вы можете изменить порядок столбцов, переупорядочив коэффициент.

mydata_bc$Behaviour <- factor(mydata_bc$Behaviour, levels = c("Resting","Feeding","Socialising","Locomotion"))

Затем вы можете построить график.

 data_summary <- function(data, varname, groupnames){
  require(plyr)
  summary_func <- function(x, col){
    c(mean = mean(x[[col]], na.rm=TRUE),
      se = sd(x[[col]], na.rm=TRUE) / sqrt(sum(!is.na(x[[col]]))))
  }
  data_sum<-ddply(data, groupnames, .fun=summary_func,
                  varname)
  data_sum <- rename(data_sum, c("mean" = varname))
  return(data_sum)
}

mydata_bc$Behaviour <- factor(mydata_bc$Behaviour, levels = c("Resting","Feeding","Socialising","Locomotion"))

df4 <- data_summary(mydata_bc, varname="Time", 
                    groupnames=c("Group", "Behaviour"))

p <- ggplot(df4, aes(x=Behaviour, y=Time, fill=Group)) + 
  geom_bar(stat="identity", position=position_dodge()) +
  geom_errorbar(aes(ymin=Time-se, ymax=Time+se), width=.2,
                position=position_dodge(0.9))

enter image description here

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