[R] overlapping bars on "dodge" ggplot histogram - can it be fixed?

hadley wickham h.wickham at gmail.com
Tue Feb 3 03:46:08 CET 2009


Hi Jason,

I can't see anyway to do this completely within in ggplot.  And it's
not easy to do the data processing yourself.  Here's one attempt that
almost works:

counts <- ddply(VADeaths_flat_df, .(round_any(Data, 20), Person), nrow)
names(counts) <- c("bin", "person", "n")

qplot(bin, n, data = counts, fill = person, geom="bar", stat
="identity", position="dodge")

Or maybe:

counts <- ddply(VADeaths_flat_df, .(cut(Data,
breaks=fullseq(range(Data), 20)), Person), nrow)
names(counts) <- c("bin", "person", "n")

qplot(person, n, data = counts, fill = person, geom="bar", stat
="identity", width = 0.9) +
  facet_grid(. ~ bin) +
  opts(axis.text.x = theme_text(angle = 45, hjust = 1, colour = "grey60"))

Hadley

On Mon, Feb 2, 2009 at 8:32 PM, Jason Rupert <jasonkrupert at yahoo.com> wrote:
> Using the following code to have a little separation between the individual
> bins:
>
> VADeaths_flat_df = stack(as.data.frame(VADeaths))
> names(VADeaths_flat_df) = c('Data','Person')
> ggplot(VADeaths_flat_df, aes(Data, fill = Person)) +
> geom_bar(position=position_dodge(width =(15)), binwidth=20)
>
> The result shows the bars overlapping.
>
> Is there any way to fix it by reducing the bar sizes?
>
> Thanks again.
>
> --- On Mon, 2/2/09, hadley wickham <h.wickham at gmail.com> wrote:
>
> From: hadley wickham <h.wickham at gmail.com>
> Subject: Re: [R] Broke ggplot...
> To: jasonkrupert at yahoo.com
> Cc: R-help at r-project.org
> Date: Monday, February 2, 2009, 5:49 PM
>
> On Mon, Feb 2, 2009 at 5:41 PM, Jason
>  Rupert <jasonkrupert at yahoo.com>
> wrote:
>> It appears I broke ggplot in my script, but that maybe it is because the
> caffeine has worn off or maybe it is late in the day.   I thought I was
> beginning to understand ggplot, but I have encountered a silly little issue.
>>
>> For some reason the following does not produce a histogram with fill due
> to the Person's characteristics:
>> (Note that VADeaths_flat_df$Data works fine...)
>>
>>
>> VADeaths_df<-data.frame(VADeaths)
> ...
>
> You can do this a bit more easily with:
>
> VADeaths_flat_df <- melt(VADeaths)
> names(VADeaths_flat_df) <- c("Age", "Person",
> "Data")
>
>> bin_size<-15.0
>> ggplot(VADeaths_flat_df, aes(x = factor(Data), fill = factor(Person))) +
> geom_bar(position=position_dodge(width =(20)), binwidth=20)
>> # or
>> ggplot(VADeaths_flat_df, aes(x=factor(Data)))
>  +
> geom_histogram(binwidth=20)
>
> Those plots look fine to me (well they're what I'd expect from the
> definition), but I'd think you'd want
>
> ggplot(VADeaths_flat_df, aes(Data, fill = Person)) +
>   geom_histogram(binwidth=20)
>
> or maybe
>
> ggplot(VADeaths_flat_df, aes(Person, weight = Data)) + geom_bar()
> ggplot(VADeaths_flat_df, aes(Person, weight = Data, fill = Age)) +
> geom_bar()
>
> Hadley
>
> --
> http://had.co.nz/
>
>



-- 
http://had.co.nz/




More information about the R-help mailing list