Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple histograms with non-integer frequencies in R using ggplot

Tags:

r

ggplot2

I'm trying to find a way to plot multiple histograms of non-integer frequencies in R. For example:

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)

using something like

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

works, but how do I superimpose b (and b_freq) onto this? any ideas?

This is what we would do if the frequencies are integer values:

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")

Something similar, when we have non_integer values?

Thanks, Karan

like image 569
Karan Tibrewal Avatar asked Dec 12 '25 13:12

Karan Tibrewal


1 Answers

I'm still not entirely sure what you're trying to do, so here are four options:

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)

If you have a discrete x values and precomputed "heights" that is not a histogram, that is a bar plot, so I would opt for one of those.

like image 125
joran Avatar answered Dec 16 '25 02:12

joran



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!