2014-11-17 2 views
1

У меня есть dataframe с четырьмя колоннами, который выглядит примерно так:R - Как я могу построить несколько гистограмм вместе?

Beef-Low Beef-High Cereal-Low Cereal-High 
90   73   107   98 
76   102   95   74 
90   118   97   56 
64   104   80   111 
86   81   98   95 
51   107   74   88 
72   100   74   82 
90   87   67   77 
95   117   89   86 
78   111   58   92 

Я хочу, чтобы гистограмма, показывающая все четыре столбца в разноцветных баров поэтому я попытался:

> hist(wt$Beef.Low, main="Weight Gain Across Four Diets", xlab="Weight Gain", col="coral", xlim=c(0,120), ylim=c(0,4)) 
> hist(wt$Beef.High, col="coral3", add=T) 
> hist(wt$Cereal.Low, col="yellow", add=T) 
> hist(wt$Cereal.High, col="yellow3", add=T) 

Какие произведено:

Histogram

Мне не нравится непрозрачный п что они маскируют формы перекрывающихся гистограмм. Я знаю, что я могу использовать найденный код here, чтобы вручную курировать цвета моих гистограмм; но это похоже на утомительный процесс, и я уверен, что должен быть лучший способ.

Вместо этого, я пытался копировать то, что было сделано в этом question

> bl = wt$Beef.Low 
> bh = wt$Beef.High 
> cl = wt$Cereal.Low 
> ch = wt$Cereal.High 
> wts = rbind(bl,bh,cl,ch) 
> wtss = as.data.frame(wts) 
> ggplot(wtss, aes("Weight", fill="Diet")) + geom_histogram(alpha=0.5, aes(y = "Frequency"), position="identity") 

Но это не работает, и я не понимаю ggplot команд достаточно хорошо, чтобы даже понятия о том, почему. Пожалуйста помоги.

+1

для ggplot было бы легче расплавить данные сначала, как в [этом ответе] (http://stackoverflow.com/questions/20184096/how-to-plot-multiple-stacked-histograms-together-in- r? lq = 1) – rawr

+0

@rawr: Я не понимаю, что такое расплав. Он сказал, что создает «расплавленный информационный кадр», но я не знаю, что это значит – Slavatron

ответ

5

Я был бы склонен делать это с помощью граней. В противном случае, с вашим набором данных, результат непонятен.

library(reshape2) 
library(ggplot2) 
gg <- melt(wt) 
ggplot(gg, aes(x=value, fill=variable)) + 
    geom_histogram(binwidth=10)+ 
    facet_grid(variable~.) 

EDIT: Ответ на комментарий OP в.

melt(...) преобразует фрейм данных из «широкого» формата - данные в разных столбцах - в «длинный» формат - все данные в одном столбце, со вторым столбцом, различающим различные типы данных (например, идентификация того столбца данные в строке пришли).

Если вы используете melt(...) с параметрами по умолчанию, как указано выше, он создает кадр данных с двумя столбцами: $value содержит фактические данные, и $variable содержит имена столбца (в исходном кадре данных), что данные поступили из , Сравните wt и gg, и я думаю, вы поймете, что я имею в виду.

Итак, здесь мы используем value для оси x и группируем данные на основе variable.

+0

Это прекрасно работало и является изящным решением моей проблемы. Я до сих пор не понимаю, что такое расплав или что такое расплавленный информационный кадр. – Slavatron

+1

Смотрите мои правки выше. – jlhoward

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