Я хочу построить столбчатый график с полосами ошибок. У меня есть фрейм данных с пятью переменными. Var1 содержит эффекты обработок для трех разных видов в Var2. Эффекты лечения указаны в переменной value. Переменные start и end содержат значения для полос погрешностей. Я хочу построить столбчатую диаграмму таким образом, чтобы порядок Var1 и Var2 был одинаковым. Что-то вроде этого:

Этот рисунок - всего лишь пример. Некоторые примеры данных:

Var1    Var2    value   start   end
Eff1    spe1    0.73    0.72    0.74
Eff2    spe1    0.25    0.24    0.26
Eff3    spe1    0.007   0.006   0.008
Eff1    spe2    0.69    0.68    0.7
Eff2    spe2    0   0   0
Eff3    spe2    0.3 0.29    0.31
Eff1    spe3    0.78    0.77    0.79
Eff2    spe3    0   0   0
Eff3    spe3    0.212   0.2 0.22

Значения в таблице не соответствуют рисунку выше. Спасибо за предложения.

0
Gongon 8 Май 2014 в 14:11

2 ответа

Лучший ответ
df <- read.table(text="
Var1    Var2    value   ybegin  yend
Eff1    spe1    0.73    0.72    0.74
Eff2    spe1    0.25    0.24    0.26
Eff3    spe1    0.007   0.006   0.008
Eff1    spe2    0.69    0.68    0.7
Eff2    spe2    0   0   0
Eff3    spe2    0.3 0.29    0.31
Eff1    spe3    0.78    0.77    0.79
Eff2    spe3    0   0   0
Eff3    spe3    0.212   0.2 0.22", header = T)
str(df)

df[df$Var1 == "Eff2", "ybegin"] <- df[df$Var1 == "Eff2", "ybegin"] + df[df$Var1 == "Eff1", "value"]
df[df$Var1 == "Eff2", "yend"] <- df[df$Var1 == "Eff2", "yend"] + df[df$Var1 == "Eff1", "value"]
df[df$Var1 == "Eff3", "ybegin"] <- df[df$Var1 == "Eff3", "ybegin"] + df[df$Var1 == "Eff2", "ybegin"]
df[df$Var1 == "Eff3", "yend"] <- df[df$Var1 == "Eff3", "yend"] + df[df$Var1 == "Eff2", "yend"]

library(ggplot2)
dodge <- position_dodge(width = 0.9)
cols <- c("black", "white", "darkgrey") 
limits <- aes(ymax = yend , ymin = ybegin)
ggplot(df, aes(x = Var2, y = value, fill = Var1)) + geom_bar(stat="identity", color = "black") + 
  scale_fill_manual(values = cols) +
  geom_errorbar(limits, colour = "red", width = 1,  position = dodge) + 
  theme_bw() +
  theme(panel.grid.major = element_blank() ,panel.grid.minor = element_blank()) 

enter image description here

2
David Arenburg 8 Май 2014 в 12:06

На мой взгляд, многослойная гистограмма с полосами ошибок - не лучший выбор. Для сравнения пример с уклоненным штрих-графиком с полосами ошибок:

ggplot(df, aes(x=Var2, y=value, fill=Var1)) + 
  geom_bar(stat="identity", color="black", position=position_dodge(width = 0.9)) + 
  geom_errorbar(aes(ymax=yend, ymin=ybegin), width=0.6, position=position_dodge(width = 0.9)) + 
  theme_bw() +
  theme(panel.grid.major.x = element_blank(), panel.grid.minor = element_blank())

Что приводит к: введите описание изображения здесь

1
Jaap 8 Май 2014 в 12:32