r - Add text to ggplot with facetted densities -


i'm encountering problem when trying make density plot ggplot. data bit in example here.

require(ggplot2) require(plyr) mms <- data.frame(deliciousness = rnorm(100),                   type=sample(as.factor(c("peanut", "regular")), 100, replace=true),                   color=sample(as.factor(c("red", "green", "yellow", "brown")), 100, replace=true))   mms.cor <- ddply(.data=mms, .(type, color), summarize, n=paste("n =", length(deliciousness)))  plot <- ggplot(data=mms, aes(x=deliciousness)) + geom_density() + facet_grid(type ~ color) + geom_text(data=mms.cor, aes(x=1.8, y=5, label=n), colour="black", inherit.aes=false, parse=false) 

labelling each facet labels work quite unless scales each facet vary. have idea how achieve putting labels @ same location when scales per facet differ?

best, daniel

something this?

plot <- ggplot(data=mms, aes(x=deliciousness)) +   geom_density(aes(y=..scaled..)) + facet_grid(type ~ color) +   geom_text(data=mms.cor, aes(x=1.2, y=1.2, label=n), colour="black") plot 

there way limits set internally ggplot scales="free", involves hacking grob (graphics object). since seem want density plots have equal height (???), can aes(y=..scaled...). setting location labels straightforward.

edit (response op's comment)

this meant hacking grob. note takes advantage of internal structure used gglpot. problem change @ time new version (and in fact different older versions). there no guarantee code work in future.

plot <- ggplot(data=mms, aes(x=deliciousness)) +   geom_density() +    facet_grid(type ~ color, scales="free") panels <- ggplot_build(plot)[["panel"]] limits <- do.call(rbind,lapply(panels$ranges,                                function(range)c(range$x.range,range$y.range))) colnames(limits) <- c("x.lo","x.hi","y.lo","y.hi") mms.cor <- cbind(mms.cor,limits) plot +    geom_text(data=mms.cor, aes(x=x.hi, y=y.hi, label=n), hjust=1,colour="black") 

the basic idea generate plot without text, build graphics object using ggplot_build(plot). can extract x- , y-limits, , bind labels in mms.cor data frame. render plot text, using these limits.

note plots different earlier answer because did not use set.seed(...) in code generate dataset (and forgot add it...).


Comments

Popular posts from this blog

PHPMotion implementation - URL based videos (Hosted on separate location) -

javascript - Using Windows Media Player as video fallback for video tag -

c# - Unity IoC Lifetime per HttpRequest for UserStore -