Re: [R] How to add error bars to a line plot with ggplot2?

2023-07-14 Thread Luigi Marongiu
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?

2023-07-14 Thread Rui Barradas

À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?

2023-07-14 Thread Ivan Krylov
В 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.