Как уже было сказано, лучше, чтобы изменить данные.
Но если вам нужно использовать исходный фрейм данных, вы должны использовать 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")
да, но изменение формы является более гибким и позволит сэкономить вам печатать. – Andrie
На ваш взгляд, что является лучшим способом переформатировать эту фреймворк, чтобы получить сюжет, который я хочу? – corrado
'reshape2 :: melt()' – Andrie