[R] How to add error bars to lattice xyplot

Luigi Marongiu m@rong|u@|u|g| @end|ng |rom gm@||@com
Tue Oct 12 08:28:26 CEST 2021


Thank you, but on the example in use, it draws at each x a triplet of
y from the same class linked by a segment. It is essentially a strip
plot rather than a scatter plot...

On Mon, Oct 11, 2021 at 10:28 PM Bert Gunter <bgunter.4567 using gmail.com> wrote:
>
> Your panel function needs to plot the points! See at ############ below
>
> xyplot(Value ~ Concentration,
>        group = Substance, data = df,
>        pch = 16, cex = 1.2, type = "b",
>        xlab=expression(bold(paste("Concentration (", mu, "M)"))),
>        ylab=expression(bold("Infection rate")),
>        col=COLS,
>        scales = list(x = list(log = 10, at=c(unique(df$Concentration))
>        )
>        ),
>        key = list(space="top", columns=4, col = "black",
>                   points=list(pch=c(16, 16, 16, 16),
>                               col=COLS
>                   ),
>                   text=list(c("A", "B", "C", "D")
>                   )
>        ),
>        panel = function (x,y,...) {
>           panel.xyplot(x,y, ...)  ###########
>           panel.segments(x0 = log10(df$Concentration),
>                          x1 = log10(df$Concentration),
>                          y0 = df$Value - dfsd$Value,
>                          y1 = df$Value + dfsd$Value,
>                          col = COLS)
>        }
>
>
>
> Bert Gunter
>
> "The trouble with having an open mind is that people keep coming along and sticking things into it."
> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
>
>
> On Mon, Oct 11, 2021 at 12:24 PM Luigi Marongiu <marongiu.luigi using gmail.com> wrote:
>>
>> Thanks,
>> now I got the bars (although without notch) but I lost the main plot:
>> ```
>> xyplot(Value ~ Concentration,
>> group = Substance, data = df,
>> pch = 16, cex = 1.2, type = "b",
>> xlab=expression(bold(paste("Concentration (", mu, "M)"))),
>> ylab=expression(bold("Infection rate")),
>> col=COLS,
>> scales = list(x = list(log = 10, at=c(unique(df$Concentration))
>> )
>> ),
>> key = list(space="top", columns=4, col = "black",
>> points=list(pch=c(16, 16, 16, 16),
>> col=COLS
>> ),
>> text=list(c("A", "B", "C", "D")
>> )
>> ),
>> panel = function (x,y) {
>> panel.segments(x0 = log10(df$Concentration),
>> x1 = log10(df$Concentration),
>> y0 = df$Value - dfsd$Value,
>> y1 = df$Value + dfsd$Value,
>> col = COLS)
>> }
>>
>> )
>> ```
>> I will check xYplot out, I think it is the tool for the job.
>>
>> On Mon, Oct 11, 2021 at 3:56 PM Deepayan Sarkar
>> <deepayan.sarkar using gmail.com> wrote:
>> >
>> > On Mon, Oct 11, 2021 at 5:41 PM Luigi Marongiu <marongiu.luigi using gmail.com> wrote:
>> > >
>> > > Hello,
>> > > I am trying to plot data using lattice. The basic plot works:
>> > > ```
>> > > Substance = rep(c("A", "B", "C", "D"),4)
>> > > Concentration = rep(1:4,4),
>> > > Value = c(62.80666667, 116.26333333,  92.26000000,   9.87333333,  14.82333333,
>> > >           92.37333333, 98.95666667,   1.48333333,   0.64666667,  50.66000000,
>> > >           25.75333333,   0.69000000, 0.21666667,   7.40666667,   6.92000000,
>> > >           0.06333333)
>> > > df = data.frame(Substance, Concentration, Value, stringsAsFactors = FALSE)
>> > > Value = c(15.2974126, 16.3196089, 57.4294280,  9.1943370, 20.5567321,
>> > > 14.0874424,
>> > >        38.3626672, 0.3780653,  0.4738495, 37.9124874, 16.2473916,  0.7218726,
>> > >        0.2498666,  8.4537585, 10.8058456,  0.1096966)
>> > > dfsd = data.frame(Substance, Concentration, Value, stringsAsFactors = FALSE)
>> > >
>> > > library(lattice)
>> > > COLS = c("gold", "forestgreen", "darkslategray3", "purple")
>> > > xyplot(Value ~ Concentration,
>> > >        group = Substance, data = df,
>> > >        pch = 16, cex = 1.2, type = "b",
>> > >        xlab=expression(bold(paste("Concentration (", mu, "M)"))),
>> > >        ylab=expression(bold("Infection rate")),
>> > >        col=COLS,
>> > >        scales = list(x = list(log = 10, at=c(unique(df$Concentration))
>> > >        )
>> > >        ),
>> > >        key = list(space="top", columns=4, col = "black",
>> > >                   points=list(pch=c(16, 16, 16, 16),
>> > >                               col=COLS,
>> > >                               text=list(c("6-PN", "8-PN", "IX", "XN")
>> > >                               )
>> > >                   )
>> > >        )
>> > >
>> > > )
>> > > ```
>> > > but how do I add the error bars?
>> > > I tried with
>> > > ```
>> > > xyplot(Value ~ Concentration,
>> > >        group = Substance, data = df,
>> > >        pch = 16, cex = 1.2, type = "b",
>> > >        xlab=expression(bold(paste("Concentration (", mu, "M)"))),
>> > >        ylab=expression(bold("Infection rate")),
>> > >        col=COLS,
>> > >        scales = list(x = list(log = 10, at=c(unique(df$Concentration))
>> > >        )
>> > >        ),
>> > >        key = list(space="top", columns=4, col = "black",
>> > >                   points=list(pch=c(16, 16, 16, 16),
>> > >                               col=COLS,
>> > >                               text=list(c("6-PN", "8-PN", "IX", "XN")
>> > >                               )
>> > >                   )
>> > >        ),
>> > >        panel = function (x,y,) {
>> > >          panel.segments(x0 = df$Concentration, x1 = df$Concentration,
>> > >                         y0 = df$Value - dfsd$Value,
>> > >                         y1 = df$Value + dfsd$Value,
>> > >                         col = COLS)
>> > >        }
>> > >
>> > > )
>> > > ```
>> > > but the bars are plotted outside the graph.
>> >
>> > You need to apply the log-transformation yourself, e.g.,
>> >
>> >          panel.segments(x0 = log10(df$Concentration), x1 =
>> > log10(df$Concentration),
>> >
>> > But this is not really a scalable approach. You should check if
>> > Hmisc::xYplot suits your needs:
>> >
>> > https://search.r-project.org/CRAN/refmans/Hmisc/html/xYplot.html
>> >
>> > Best,
>> > -Deepayan
>> >
>> > > What is the correct syntax? can I use raw data instead of making the
>> > > mean and std dev separately?
>> > > Thanks
>> > >
>> > > --
>> > > Best regards,
>> > > Luigi
>> > >
>> > > ______________________________________________
>> > > R-help using 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.
>>
>>
>>
>> --
>> Best regards,
>> Luigi
>>
>> ______________________________________________
>> R-help using 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.



-- 
Best regards,
Luigi



More information about the R-help mailing list