2015-12-29 4 views
3

Я пытаюсь найти способ построить несколько гистограмм нецелых частот в R. Например:Несколько гистограмм с нецелыми частотами в R с использованием ggplot

a = c(1,2,3,4,5) 
a_freq = c(1.5, 2.5, 3.5, 4.5, 5.5) 
b = c(2, 4, 6, 8, 10) 
b_freq = c(2.5, 5, 6, 7, 8) 

, используя что-то вроде

qplot(x = a, weight = a_freq, geom = "histogram") 

работает, но как наложить на него b (и b_freq)? есть идеи?

Это то, что мы будем делать, если частоты целые значения:

require(ggplot2) 
require(reshape2) 
set.seed(1) 
df <- data.frame(x = rnorm(n = 1000, mean = 5, sd = 2), y = rnorm(n = 1000, mean = 2), z = rnorm(n = 1000, mean = 10)) 
ggplot(melt(df), aes(value, fill = variable)) + geom_histogram(position = "dodge") 

что-то подобное, когда мы имеем значения non_integer?

Спасибо, Karan

+1

http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/ –

+0

Можете ли вы уточнить, пожалуйста? Люди часто путают гистограммы с барами. Вы действительно имеете в виду гистограмму, или хватит ли штрихового графика? Вы действительно хотите «наложить» их на _one_ graph? Некоторые бары будут на вершине друг друга. Должны ли они избегать друг друга? Альфа-смешивание? Или будет украшать их рядом друг с другом? Это те детали, которые должны быть в хорошем вопросе. – joran

+0

Эй @joran вот уточнения: –

ответ

3

Я все еще не совсем уверен, что вы пытаетесь сделать, так что здесь четыре варианта:

library(ggplot2) 

a = c(1,2,3,4,5) 
a_freq = c(1.5, 2.5, 3.5, 4.5, 5.5) 
b = c(2, 4, 6, 8, 10) 
b_freq = c(2.5, 5, 6, 7, 8) 

dat <- data.frame(x = c(a,b), 
            freq = c(a_freq,b_freq), 
            grp = rep(letters[1:2],each = 5)) 

ggplot(dat,aes(x = x,weight = freq,fill = grp)) + 
    geom_histogram(position = "dodge") 

ggplot(dat,aes(x = x,y = freq,fill = grp)) + 
    geom_bar(position = "dodge",stat = "identity",width = 0.5) 

ggplot(dat,aes(x = x,y = freq,fill = grp)) + 
    facet_wrap(~grp) + 
    geom_bar(stat = "identity",width = 0.5) 

ggplot() + 
    geom_bar(data = dat[dat$grp == 'a',],aes(x = x,y = freq), 
        fill = "blue", 
        alpha = 0.5, 
        stat = "identity", 
        width = 0.5) + 
    geom_bar(data = dat[dat$grp == 'b',],aes(x = x,y = freq), 
        fill = "red", 
        alpha = 0.5, 
        stat = "identity", 
        width = 0.5) 

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

+0

Это прекрасно. Спасибо. –

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