比较ggplot2中的比例

时间:2013-02-18 11:56:50

标签: r ggplot2

我有一个像这样的数据框df

Id    Var1    Var2    Var3
001   yes     no      yes
002   no      no      yes
003   yes     yes     no

我想创建一个带有3个条形的条形图,代表yes no Var1 Var2Var3的比例。是否可以使用ggplot执行此操作而不重塑数据框?

谢谢,

的Corrado

1 个答案:

答案 0 :(得分:1)

正如已经提到的那样,重塑数据会更好。

但是如果您需要使用原始数据框,那么您应该为要在图上显示的每列使用geom_bar()。在geom_bar()中,您应该提供x值来区分这些条形码 - 我使用变量名称作为字符。 fill=position="stack"可确保条形图堆叠。 y=(..count..)/sum(..count..))将计算比例。

df <- read.table(text=
"Id    Var1    Var2    Var3
 001   yes     no      yes
 002   no      no      yes
 003   yes     yes     no",header=T)

library(scales)
library(ggplot2
ggplot(df)+
  geom_bar(aes(x="Val1",fill=Var1,y=(..count..)/sum(..count..)),position="stack")+
  geom_bar(aes(x="Val2",fill=Var2,y=(..count..)/sum(..count..)),position="stack")+
  geom_bar(aes(x="Val3",fill=Var3,y=(..count..)/sum(..count..)),position="stack")+
  scale_y_continuous("Percents",labels = percent) + 
  scale_x_discrete("Values")+
  scale_fill_discrete("Legend_title")

enter image description here