我有一个df
像这样的数据框:
Id Var1 Var2 Var3
001 yes no yes
002 no no yes
003 yes yes no
我想创建一个带有 3 个条形图的条形图,它们代表yes
和no
for 的比例Var1
Var2
Var3
。是否可以在ggplot
不重塑数据框的情况下做到这一点?
谢谢,
科拉多
正如已经提到的,最好重塑数据。
但是,如果您需要使用原始数据框,那么您应该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")