Re: [R] How to add error bars to a line plot with ggplot2?
Thank you, the problem was indeed about factors. Case solved On Fri, Jul 14, 2023 at 7:05 PM Rui Barradas wrote: > > Às 17:33 de 14/07/2023, Luigi Marongiu escreveu: > > Hello, > > I am measuring a certain variable at given time intervals and > > different concentrations of a reagent. I would like to make a scatter > > plot of the values, joined by a line to highlight the temporal > > measure. > > I can plot this all right. Now, since I have more than one replicate, > > I would like to add he error bars. > > I prepared a dataframe with the mean measures and a column with the > > standard deviations, but when I run the code, I get the error: > > ``` > > Error in `check_aesthetics()`: > > ! Aesthetics must be either length 1 or the same as the data (20): colour > > Run `rlang::last_trace()` to see where the error occurred. > > ``` > > I am missing something, but what? > > Thank you > > > > > > WORKING EXAMPLE > > ``` > > measTime= c(1,2,4,24,48,1,2,4,24 > > ,48,1,2,4,24,48,1,2,4,24,48) > > conc= c(0.25,0.25,0.25,0.25,0.25,1.12,1.12 > > ,1.12,1.12,1.12,2.5,2.5,2.5,2.5,2.5 > > ,25,25,25,25,25) > > varbl= c(0.0329,0.27,0.0785,0.1015 > > ,-0.193,0.048,0.113,0.1695,-0.775,0.464,-0.257 > > ,-0.154,-0.3835,-1.23,-0.513,1.3465,1.276 > > ,1.128,-2.56,-1.813) > > stdDev=c(0.646632301492381,0,1.77997087991162 > > ,0.247683265482349,0,0.282901631902917,0 > > ,0.273086677326693,1.03807578400295,0,0.912213425319609 > > ,0,1.64371621638287,2.23203614068709,0,0.2615396719429 > > ,0,0.54039985196149,2.15236180353893,0) > > df = data.frame(Time=measTime, mM=conc, ddC=varbl, SD=stdDev) > > library(ggplot2) > > COLS = c("green", "red", "blue", "yellow") > >ggplot(df, > > aes(x=Time, y=ddC, colour=mM, group=mM)) + > >geom_line(aes(x=Time, y=ddC, colour=mM, group=mM)) + > >geom_errorbar(aes(x=Time, ymin=ddC-SD, ymax=ddC+SD, colour=mM, group=mM), > > width=.1, colour=COLS) + > >geom_point(size=6) + > >scale_colour_manual(values = COLS) + > >ggtitle("Exposure") + > >xlab(expression(bold("Time (h)"))) + > >ylab(expression(bold("Value"))) + > >geom_hline(aes(yintercept=0)) + > >theme_classic() > >``` > > > > __ > > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > > 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. > Hello, > > Two notes: > > 1. If you want to use a discrete colours vector, your 'colour' aesthetic > must be mapped to a discrete variabe. The most frequent cases are > character or factor columns. > > 2. If you start the plot with certain aesthetics set you don't have to > repeat them in subsequent layers, geom_line can be called with no aes() > and gem_errorbar doesn't need x=measTime again. > > > As for the main error, the colors vector COLS should be removed from > geom_errorbar. > > > > df <- data.frame(Time = measTime, > mM = factor(conc), # this must be a factor > ddC = varbl, > SD = stdDev) > > library(ggplot2) > > COLS = c("green", "red", "blue", "yellow") > > ggplot(df, aes(x = Time, y = ddC, colour = mM, group = mM)) + >geom_line() + >geom_errorbar(aes(ymin = ddC - SD, ymax = ddC + SD), width = 0.1) + >geom_point(size = 6) + >geom_hline(aes(yintercept = 0)) + >scale_colour_manual(values = COLS) + >ggtitle("Exposure") + >xlab(expression(bold("Time (h)"))) + >ylab(expression(bold("Value"))) + >theme_classic() > > > Hope this helps, > > Rui Barradas > -- Best regards, Luigi __ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.
Re: [R] How to add error bars to a line plot with ggplot2?
Às 17:33 de 14/07/2023, Luigi Marongiu escreveu: Hello, I am measuring a certain variable at given time intervals and different concentrations of a reagent. I would like to make a scatter plot of the values, joined by a line to highlight the temporal measure. I can plot this all right. Now, since I have more than one replicate, I would like to add he error bars. I prepared a dataframe with the mean measures and a column with the standard deviations, but when I run the code, I get the error: ``` Error in `check_aesthetics()`: ! Aesthetics must be either length 1 or the same as the data (20): colour Run `rlang::last_trace()` to see where the error occurred. ``` I am missing something, but what? Thank you WORKING EXAMPLE ``` measTime= c(1,2,4,24,48,1,2,4,24 ,48,1,2,4,24,48,1,2,4,24,48) conc= c(0.25,0.25,0.25,0.25,0.25,1.12,1.12 ,1.12,1.12,1.12,2.5,2.5,2.5,2.5,2.5 ,25,25,25,25,25) varbl= c(0.0329,0.27,0.0785,0.1015 ,-0.193,0.048,0.113,0.1695,-0.775,0.464,-0.257 ,-0.154,-0.3835,-1.23,-0.513,1.3465,1.276 ,1.128,-2.56,-1.813) stdDev=c(0.646632301492381,0,1.77997087991162 ,0.247683265482349,0,0.282901631902917,0 ,0.273086677326693,1.03807578400295,0,0.912213425319609 ,0,1.64371621638287,2.23203614068709,0,0.2615396719429 ,0,0.54039985196149,2.15236180353893,0) df = data.frame(Time=measTime, mM=conc, ddC=varbl, SD=stdDev) library(ggplot2) COLS = c("green", "red", "blue", "yellow") ggplot(df, aes(x=Time, y=ddC, colour=mM, group=mM)) + geom_line(aes(x=Time, y=ddC, colour=mM, group=mM)) + geom_errorbar(aes(x=Time, ymin=ddC-SD, ymax=ddC+SD, colour=mM, group=mM), width=.1, colour=COLS) + geom_point(size=6) + scale_colour_manual(values = COLS) + ggtitle("Exposure") + xlab(expression(bold("Time (h)"))) + ylab(expression(bold("Value"))) + geom_hline(aes(yintercept=0)) + theme_classic() ``` __ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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. Hello, Two notes: 1. If you want to use a discrete colours vector, your 'colour' aesthetic must be mapped to a discrete variabe. The most frequent cases are character or factor columns. 2. If you start the plot with certain aesthetics set you don't have to repeat them in subsequent layers, geom_line can be called with no aes() and gem_errorbar doesn't need x=measTime again. As for the main error, the colors vector COLS should be removed from geom_errorbar. df <- data.frame(Time = measTime, mM = factor(conc), # this must be a factor ddC = varbl, SD = stdDev) library(ggplot2) COLS = c("green", "red", "blue", "yellow") ggplot(df, aes(x = Time, y = ddC, colour = mM, group = mM)) + geom_line() + geom_errorbar(aes(ymin = ddC - SD, ymax = ddC + SD), width = 0.1) + geom_point(size = 6) + geom_hline(aes(yintercept = 0)) + scale_colour_manual(values = COLS) + ggtitle("Exposure") + xlab(expression(bold("Time (h)"))) + ylab(expression(bold("Value"))) + theme_classic() Hope this helps, Rui Barradas __ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.
Re: [R] How to add error bars to a line plot with ggplot2?
В Fri, 14 Jul 2023 18:33:38 +0200 Luigi Marongiu пишет: > COLS = c("green", "red", "blue", "yellow") > geom_errorbar(aes(x=Time, ymin=ddC-SD, ymax=ddC+SD, colour=mM, > group=mM), width=.1, colour=COLS) + The last `colour` argument in the call above is a character vector of length 4. You probably meant to use it with a scale_colour_... function instead. -- Best regards, Ivan __ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.