Thank you, the problem was indeed about factors. Case solved On Fri, Jul 14, 2023 at 7:05 PM Rui Barradas <ruipbarra...@sapo.pt> 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.0329999999999999 ,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.