2013-02-18 2 views
0

У меня есть dataframe df как этот:Сравнивая пропорции в ggplot2

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

Я хочу создать barplot с 3 бара, который представляет пропорции yes и no для Var1Var2Var3. Возможно ли это сделать с ggplot без изменения формы данных?

Спасибо,

Corrado

+2

да, но изменение формы является более гибким и позволит сэкономить вам печатать. – Andrie

+0

На ваш взгляд, что является лучшим способом переформатировать эту фреймворк, чтобы получить сюжет, который я хочу? – corrado

+0

'reshape2 :: melt()' – Andrie

ответ

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

+0

Спасибо! Невозможно использовать geom_bar (position = "fill")? – corrado

+0

Да, position = "fill" также будет работать. –

Смежные вопросы