Like others have suggested, I think ggplot2 is probably the best way
to go about this, but if you'd rather use base graphics (and you never
indicated how you felt about ggplot2), you could do something like
this with tapply:

fcts <- letters[sample(9,1500,T)]
vals <- rnorm(1500)
df <- data.frame(category = factor(fcts),values = vals)

n <- length(levels(df$category))
n <- (ceiling(sqrt(n)))
layout(matrix(1:n^2,n))
tapply(df$values, df$category, hist, n=15,simplify=F)

One of the unattractive features of this solution is that the
histogram titles aren't particularly helpful: something like this can
force a solution,

tapply(df$values, df$category, function(x){
    mn = deparse(substitute(x))
    mn = levels(df$category)[as.integer(substr(mn,4,regexpr("L",mn)-1))]
    hist(x, n = 15, main = mn)
    },simplify=F)

but it's evidently not the prettiest (especially when compared to ggplot2).

Anyways, another vote for the methods already suggested with this as
an alternative if needed.

Cheers,

Michael Weylandt

On Mon, Oct 17, 2011 at 9:58 AM, Ben Bolker <bbol...@gmail.com> wrote:
> Paul Hiemstra <paul.hiemstra <at> knmi.nl> writes:
>
>>
>> Hi,
>>
>> When using ggplot, take a look at facet_wrap and geom_histogram.
>>
>> regards,
>
>  More specifically, try something along the lines of
>
> d <- data.frame(f=factor(paste("chr",rep(c(1,2,3,7,9,22),each=50),sep="")),
>     v=runif(300))
> library(ggplot2)
> ggplot(d,aes(x=v))+geom_histogram()+facet_wrap(~f)
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to