如何通过geom_bar绘制比例,同时按每个因子的总计数进行缩放

问题描述 投票:1回答:1

这是一个简短的例子

library(ggplot2) 
specie <- c(rep("sorgho" , 5) , rep("poacee" , 5) , rep("banana" , 5) , rep("triticum" , 5) )
  condition <- rep(c("normal" , "stress" , "Nitrogen","Nitrogen","Nitrogen") , 4)
  data <- data.frame(specie,condition)
  ggplot(data) +  aes(x = factor(specie), fill=condition) + 
  geom_bar(position = "fill")

[<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9OS3M0SC5qcGcifQ==” alt =“在此处输入图像描述”>]我想纠正“氮”过多的问题,并只绘制它的相对贡献。谢谢

r ggplot2 geom-bar
1个回答
0
投票

您可以使用dplyr将带有比例值的列直接添加到原始数据框中:

# create summary table
aa <- data.frame(with(data, table(specie, condition))) 
bb <- data.frame(with(data, table(specie))) 
cc <- data.frame(with(data, table(condition))) 

sum <- merge(aa, bb, by= "specie") %>%
  merge(cc, by = "condition") %>%
  mutate(value_scaled = Freq.x/Freq.y/Freq)

colnames(sum)[3:5] <- c("sum_sp_cond", "sum_sp", "sum_cond") # better column names

绘制它:

ggplot(sum) +  aes(x = factor(specie),  fill=condition) + 
  geom_bar(position="fill")

仍然不确定我是否完全理解您的要求...并且可能会有更好的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.