我有一个像这样的数据框df
:
Id Var1 Var2 Var3
001 yes no yes
002 no no yes
003 yes yes no
我想创建一个带有3个条形的条形图,代表yes
no
Var1
Var2
和Var3
的比例。是否可以使用ggplot
执行此操作而不重塑数据框?
谢谢,
的Corrado
答案 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")