Dear all I would like to superpose some smoothing line through boxplot in ggplot> dput(ad)structure(list(konc.f = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 6L, 6L, 6L, 7L, 7L, 7L), .Label = c("(189,196]", "(196,202]", "(202,208]", "(208,215]", "(215,221]", "(221,227]", "(227,234]"), class = "factor"), bel = c(99.28, 99.29, 99.25, 98.13, 99.51, 99.21, 99.09, 97.84, 98.97, 98.48, 98.64, 98.09, 98.44, 98.19, 98.25, 97.54, 99.11, 98.23, 97.62, 97.01, 97.62, 97.58, 97.42, 97.75, 97.16, 96.79, 96.82, 98.8, 99.02, 98.86, 98.85, 99.25, 98.46, 98.68, 98.3, 98.67, 98.54, 98.39, 98.18, 98.54, 99.13, 98.92, 98.29, 98.78, 98.58, 98.78, 98.9, 98.18, 97.5, 98.63, 97.53, 96.55, 96.52, 96.23, 95.54, 95.54, 96.33, 95.91, 95.41, 94.98, 94.69, 93.95, 94.05, 95.22, 94.6, 94.27, 93.44, 95.15, 94.62, 93.86, 94.51, 94.83, 93.66, 92.95, 94.4, 93.17, 92.77, 95.79, 95.03, 94.96, 95.94, 95.71, 95.19, 95.11, 94.91, 94.42, 94.68, 94.91, 94.66, 94.05, 93.57, 93.43, 94.77, 93.58, 93.84, 93.24, 94.45, 93.57, 93.46, 92.38, 92.39, 94.07 ), typ = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("alrut", "nealrut", "stan", "vlakan"), class = "factor")), .Names = c("konc.f", "bel", "typ"), row.names = c(NA, -102L), class = "data.frame")>Here is what I did p<-ggplot(ad, aes(x=konc.f, y=bel, colour=typ)) p+geom_boxplot()+geom_jitter(position=position_jitter(w=0.1))+stat_smooth() geom_smooth: Only one unique x value each group.Maybe you want aes(group = 1)? I get nice picture with boxes but I expected to get something like smoothing line through box centres. Is it possible without some hack to stat_smooth code? Regards Petr
Hi Petr: I had to do a little bit of finagling, but this seems to work. I basically did the following: (i) coordinated the dodging of the points and boxplots by typ within konc.f; (ii) summarized the group medians in a separate data frame and added an additional column to compensate for the offsets in the boxplots due to dodging (iii) used geom_line() with group typ to get the connecting lines. # library(ggplot2) # Summarize group medians ads <- ddply(ad, .(konc.f, typ), summarise, m = median(bel)) # Offset x-positions ads$pos <- rep(c(1:4, 6, 7), each = 4) + rep(c(-0.3, -0.1, 0.1, 0.3), 6) # Note use of position_dodge() with same width in both the boxplot and point geoms # Add geom_line with summarized data frame and offset x-positions # group = typ produces a separate line per typ p + geom_boxplot(position = position_dodge(width = 0.8)) + geom_point(position = position_dodge(width = 0.8)) + geom_line(data = ads, aes(x = pos, y = m, colour = typ, group = typ)) I chose to create a separate data frame for the summaries rather than use stat_summary(), for example, because it is a bit easier to plot individual layers that way. HTH, Dennis On Mon, Jan 24, 2011 at 11:05 PM, Petr PIKAL <petr.pikal@precheza.cz> wrote:> Dear all > > I would like to superpose some smoothing line through boxplot in ggplot > > > dput(ad) > structure(list(konc.f = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, > 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 6L, 6L, > 7L, 7L, 7L, 7L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, > 4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, > 1L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, > 6L, 6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, > 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 6L, 6L, 6L, 7L, 7L, 7L), .Label > c("(189,196]", > "(196,202]", "(202,208]", "(208,215]", "(215,221]", "(221,227]", > "(227,234]"), class = "factor"), bel = c(99.28, 99.29, 99.25, > 98.13, 99.51, 99.21, 99.09, 97.84, 98.97, 98.48, 98.64, 98.09, > 98.44, 98.19, 98.25, 97.54, 99.11, 98.23, 97.62, 97.01, 97.62, > 97.58, 97.42, 97.75, 97.16, 96.79, 96.82, 98.8, 99.02, 98.86, > 98.85, 99.25, 98.46, 98.68, 98.3, 98.67, 98.54, 98.39, 98.18, > 98.54, 99.13, 98.92, 98.29, 98.78, 98.58, 98.78, 98.9, 98.18, > 97.5, 98.63, 97.53, 96.55, 96.52, 96.23, 95.54, 95.54, 96.33, > 95.91, 95.41, 94.98, 94.69, 93.95, 94.05, 95.22, 94.6, 94.27, > 93.44, 95.15, 94.62, 93.86, 94.51, 94.83, 93.66, 92.95, 94.4, > 93.17, 92.77, 95.79, 95.03, 94.96, 95.94, 95.71, 95.19, 95.11, > 94.91, 94.42, 94.68, 94.91, 94.66, 94.05, 93.57, 93.43, 94.77, > 93.58, 93.84, 93.24, 94.45, 93.57, 93.46, 92.38, 92.39, 94.07 > ), typ = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, > 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, > 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, > 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 1L, 1L, > 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, > 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, > 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("alrut", > "nealrut", "stan", "vlakan"), class = "factor")), .Names = c("konc.f", > "bel", "typ"), row.names = c(NA, -102L), class = "data.frame") > > > > Here is what I did > > p<-ggplot(ad, aes(x=konc.f, y=bel, colour=typ)) > p+geom_boxplot()+geom_jitter(position=position_jitter(w=0.1))+stat_smooth() > geom_smooth: Only one unique x value each group.Maybe you want aes(group > 1)? > > I get nice picture with boxes but I expected to get something like > smoothing line through box centres. > > Is it possible without some hack to stat_smooth code? > > Regards > Petr > > ______________________________________________ > 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. >[[alternative HTML version deleted]]
Thank you I did not realise I can simply add data from different source data frame to constructed graph. It even works with stat_smooth() quite straightforward. One is always learning new tricks. Best regards Petr r-help-bounces at r-project.org napsal dne 25.01.2011 10:24:42:> Hi Petr: > > I had to do a little bit of finagling, but this seems to work. Ibasically> did the following: > > (i) coordinated the dodging of the points and boxplots by typ withinkonc.f;> (ii) summarized the group medians in a separate data frame and added an > additional > column to compensate for the offsets in the boxplots due to dodging > (iii) used geom_line() with group typ to get the connecting lines. > > # library(ggplot2) > > # Summarize group medians > ads <- ddply(ad, .(konc.f, typ), summarise, m = median(bel)) > # Offset x-positions > ads$pos <- rep(c(1:4, 6, 7), each = 4) + rep(c(-0.3, -0.1, 0.1, 0.3), 6) > > # Note use of position_dodge() with same width in both the boxplot andpoint> geoms > # Add geom_line with summarized data frame and offset x-positions > # group = typ produces a separate line per typ > > p + geom_boxplot(position = position_dodge(width = 0.8)) + > geom_point(position = position_dodge(width = 0.8)) + > geom_line(data = ads, aes(x = pos, y = m, colour = typ, group =typ))> > I chose to create a separate data frame for the summaries rather thanuse> stat_summary(), for example, because it is a bit easier to plotindividual> layers that way. > > HTH, > Dennis > > On Mon, Jan 24, 2011 at 11:05 PM, Petr PIKAL <petr.pikal at precheza.cz>wrote:> > > Dear all > > > > I would like to superpose some smoothing line through boxplot inggplot> > > > > dput(ad) > > structure(list(konc.f = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, > > 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 6L, 6L, > > 7L, 7L, 7L, 7L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, > > 4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, > > 1L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, > > 6L, 6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, > > 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 6L, 6L, 6L, 7L, 7L, 7L), .Label > > c("(189,196]", > > "(196,202]", "(202,208]", "(208,215]", "(215,221]", "(221,227]", > > "(227,234]"), class = "factor"), bel = c(99.28, 99.29, 99.25, > > 98.13, 99.51, 99.21, 99.09, 97.84, 98.97, 98.48, 98.64, 98.09, > > 98.44, 98.19, 98.25, 97.54, 99.11, 98.23, 97.62, 97.01, 97.62, > > 97.58, 97.42, 97.75, 97.16, 96.79, 96.82, 98.8, 99.02, 98.86, > > 98.85, 99.25, 98.46, 98.68, 98.3, 98.67, 98.54, 98.39, 98.18, > > 98.54, 99.13, 98.92, 98.29, 98.78, 98.58, 98.78, 98.9, 98.18, > > 97.5, 98.63, 97.53, 96.55, 96.52, 96.23, 95.54, 95.54, 96.33, > > 95.91, 95.41, 94.98, 94.69, 93.95, 94.05, 95.22, 94.6, 94.27, > > 93.44, 95.15, 94.62, 93.86, 94.51, 94.83, 93.66, 92.95, 94.4, > > 93.17, 92.77, 95.79, 95.03, 94.96, 95.94, 95.71, 95.19, 95.11, > > 94.91, 94.42, 94.68, 94.91, 94.66, 94.05, 93.57, 93.43, 94.77, > > 93.58, 93.84, 93.24, 94.45, 93.57, 93.46, 92.38, 92.39, 94.07 > > ), typ = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, > > 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, > > 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, > > 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 1L, 1L, > > 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, > > 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, > > 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("alrut", > > "nealrut", "stan", "vlakan"), class = "factor")), .Names = c("konc.f", > > "bel", "typ"), row.names = c(NA, -102L), class = "data.frame") > > > > > > > Here is what I did > > > > p<-ggplot(ad, aes(x=konc.f, y=bel, colour=typ)) > >p+geom_boxplot()+geom_jitter(position=position_jitter(w=0.1))+stat_smooth()> > geom_smooth: Only one unique x value each group.Maybe you wantaes(group > > 1)?> > > > I get nice picture with boxes but I expected to get something like > > smoothing line through box centres. > > > > Is it possible without some hack to stat_smooth code? > > > > Regards > > Petr > > > > ______________________________________________ > > R-help at 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. > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.