2013-06-19 5 views
2

У меня возникают проблемы с созданием бархарта, в котором ось y не подсчитывается, а значение из переменных.ggplot2 - Укладка/уклонение гистограммы

Я использую stat=identity, что отлично подходит для одной переменной. Но что, если у меня есть две переменные и вы хотите создать барьер для укладки/уклонения?

У меня есть некоторые ложные данные здесь:

foo <- data.frame(case=c('A','B','C'), var1=rnorm(3), var2=rnorm(3)) 

Так мои три случая на оси х являются A, B и C. Я хочу, чтобы построить значения var1 и var2, как бар. Благодаря!

ответ

4

Сначала изменили данные образца. При создании кадра данных вам не нужно cbind(), потому что в этом случае вы делаете все столбцы как факторы.

foo <- data.frame(case=c('A','B','C'), var1=rnorm(3), var2=rnorm(3)) 

Чтобы использовать две переменные для барплота, самым простым способом было бы расплавить данные из широкоформатного формата.

library(reshape2) 
foo.long<-melt(foo) 
foo.long 
    case variable  value 
1 A  var1 0.7150827 
2 B  var1 -0.5279363 

Теперь используйте value, как Y значения и variable для заполнения. stat="identity" и position="dodge" гарантируют, что фактические значения будут нанесены на график, а столбцы будут преследованы.

ggplot(foo.long, aes(case,value,fill=variable))+ 
     geom_bar(position="dodge",stat="identity") 

enter image description here

+0

Благодаря кучу! Я также изменил макет данных в моем вопросе, чтобы не путать будущих читателей. – Heisenberg

+0

Хм я только что столкнулся с реальным экземпляром, где все мои столбцы в фрейме данных (импортированные из Excel) являются векторами. Не могли бы вы объяснить или указать мне ресурс об этом поведении? Когда R считает, что столбец является фактором? – Heisenberg

+0

Просто из любопытства, можно ли контролировать, какая переменная закладывается сначала из ggplot? Или мне нужно изменить порядок данных? – Heisenberg

1

Я не отвечая на вопрос, в Сансе я не использую ggplot2. Но, если вы хотите использовать data.frame в своем широком формате, еще один способ - использовать `` barchart from решетка package. To get ggplot2 theme, I am using решеткаExtra`. Использование @Didzis данных:

library(latticeExtra) 
barchart(var1+var2~case,data=foo,origin=0, 
    par.settings = ggplot2like(),axis=axis.grid,auto.key=TRUE) 

enter image description here

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