Пропорциональная столбчатая диаграмма

#r #ggplot2 #bar-chart

#r #ggplot2 #столбчатая диаграмма

Вопрос:

Я пытаюсь создать столбчатый график с накоплением, в котором одна переменная является долей второй переменной. Данные

    snps2       ors2       orm2
1  ABCA7     0.00000000  0.4140283  
2  B1NI      0.00000000  0.3140075  
3  CD2AP     0.00000000  0.2087200
4  CD33      0.22665737  0.2266574  
5  CLU       0.12221763  0.2444353  
6  CR1       0.00000000  0.3140075  
7  EPAH1     0.22665737  0.2266574  
8  MS4A4A    0.24443527  0.2444353  
9  MS4A4E    0.07696104  0.1539221  
10 MSA6A     0.20872003  0.2087200  
11 PICALM    0.12221763  0.2444353  
12 APOE_e2   0.00000000 -1.3862944  
13 APOE_e4   0.00000000  2.6752584  
  

Значения для ors2 всегда будут составлять либо 0%, либо 50%, либо 100% от значения orm2.
Я преобразовал это в длинный формат для использования в ggplot2.

 dat_m <- melt(mydata)
ggplot(dat_m, aes(snps2, value, fill = variable))   geom_bar(stat = "identity")
  

Это дает мне следующий график:

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

Тем не менее, красные значения, а не были пропорцией зеленых значений, чего я и хочу, они были добавлены друг к другу.

Как я могу сделать так, чтобы ors2 был пропорцией orsm2 на графике?

Спасибо

Ответ №1:

Поскольку в столбчатой диаграмме с накоплением значения всегда суммируются, вам просто нужно вычесть перед построением графика: orm2 = orm2 — ors2

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

 require(reshape2)
require(ggplot2)


mydata$orm2_adj=mydata$orm2-mydata$ors2
summary(mydata)
dat_m <- melt(mydata[,-3])

ggplot(dat_m, aes(snps2, value, fill = variable,color=variable))  
  geom_bar(stat = "identity") 
  scale_color_manual(values=c("red","transparent"))
  

Ответ №2:

Возможно, вам захочется иметь столбчатый график с уклоном вместо сложенного:

 ggplot(dat_m, aes(snps2, value, fill = variable))   
  geom_bar(stat = "identity", position='dodge')
  

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

В столбчатой диаграмме с накоплением значения всегда суммируются.

Ответ №3:

В противном случае измените свою переменную следующим образом

 dat$orm2 <- dat$orm2 - dat$ors2
  

тогда делай

 dat_m <- melt(mydata)
ggplot(dat_m, aes(snps2, value, fill = variable))   geom_bar(stat = "identity")