[R] ggplot pointrange from other df and missing legend

PIKAL Petr petr@p|k@| @end|ng |rom prechez@@cz
Tue May 17 08:23:30 CEST 2022


Hallo Rui

Yes, close to. But after some slight changes I got the figure I like.

- in geom_pointrange I used only black
- commented scale_shape_manual as it is not needed anymore
- in scale_colour_manual I used values 1 for black colour and labels NULL to supress "black" in measured label

and the plot has all parts as expected.

It is probably due to fact that I used mapping of shape in aesthetics in my original code using one data frame. When I added this aesthetic mapping to my code with two data frames it worked. I learned that first I need to use mapping in aesthetics and then I can to modify it by scale_whatever_manual.

Thank you very much for that lesson. 

Best regards
Petr

Expected plot, data in two data frames

ggplot() +
   geom_col(
     data=test,
     aes(x=Sample, y=value, fill=SSAtype),
     position="dodge"
   ) +
   geom_pointrange(
     data=test.ag,
     aes(x=Sample, y=avg, ymin=avg-odch, ymax=avg+odch, colour="black"),
     size = 1
   ) +
   scale_fill_manual(
     values=tablePal,
     name="Calculation\n performed\n according to",
     labels=c("bla", "blabla")
   ) +
   guides(fill = guide_legend(override.aes = list(shape = NA))) +
#   scale_shape_manual(name = "Measured", values = 19, labels = NULL) +
   scale_color_manual(name= "Measured", values=1, labels=NULL)

> -----Original Message-----
> From: Rui Barradas <ruipbarradas using sapo.pt>
> Sent: Monday, May 16, 2022 5:33 PM
> To: PIKAL Petr <petr.pikal using precheza.cz>; r-help using r-project.org
> Subject: Re: [R] ggplot pointrange from other df and missing legend
> 
> Hello,
> 
> OK, now I understand the problem better. What is the variable defining the
> points colors? Without a mapping to an aesthetic, there will be no legend. In
> what follows I map color = Sample and the legend shows up.
> Then scale_color_manual can change the colors.
> 
> Is this it?
> 
> 
> palette("Tableau 10")
> tablePal <- palette()
> 
> ggplot() +
>    geom_col(
>      data=test,
>      aes(x=Sample, y=value, fill=SSAtype),
>      position="dodge"
>    ) +
>    geom_pointrange(
>      data=test.ag,
>      aes(x=Sample, y=avg, ymin=avg-odch, ymax=avg+odch, color = Sample),
>      size = 2
>    ) +
>    scale_fill_manual(
>      values=tablePal,
>      name="Calculation\n performed\n according to",
>      labels=c("bla", "blabla")
>    ) +
>    guides(fill = guide_legend(override.aes = list(shape = NA))) +
>    scale_shape_manual(name = "Measured", values = 19, labels = NULL) +
>    scale_color_manual(values = tablePal[3:5])
> 
> 
> Hope this helps,
> 
> Rui Barradas
> 
> 
> Às 13:21 de 16/05/2022, PIKAL Petr escreveu:
> > Hallo Rui
> >
> > Thanks. After I sent the first mail I noticed the missing tablePal.
> >
> > palette("Tableau 10")
> > tablePal <- palette()
> >
> > ggplot() +
> >     geom_col(
> >       data=test,
> >       aes(x=Sample, y=value, fill=SSAtype),
> >       position="dodge"
> >     ) +
> >     geom_pointrange(
> >       data=test.ag,
> >       aes(x=Sample, y=avg, ymin=avg-odch, ymax=avg+odch),
> >       size = 2
> >     ) +
> >     scale_fill_manual(
> >      values=tablePal,
> >       name="Calculation\n performed\n according to",
> >       labels=c("bla", "blabla")
> >     ) +
> >     scale_shape_manual(name = "Measured", values = 19, labels = NULL)
> >
> > You are correct that legend for bars is there. But the legend for points is
> missing. If I use only geom_point and values from the "test" data, also
> legend for the point appears. Is it possible that the second legend could be
> created only if all data are from one data frame?
> >
> > Best regards
> > Petr
> >
> >> -----Original Message-----
> >> From: Rui Barradas <ruipbarradas using sapo.pt>
> >> Sent: Monday, May 16, 2022 1:53 PM
> >> To: PIKAL Petr <petr.pikal using precheza.cz>; r-help using r-project.org
> >> Subject: Re: [R] ggplot pointrange from other df and missing legend
> >>
> >> Hello,
> >>
> >> In the code below the legend is not missing, I couldn't reproduce that
> error.
> >> As for the size of the points, include argument size. I have size=2.
> >>
> >> Also:
> >>    - tablePal is missing, I've chosen colors 2:3;
> >>    - I have commented out the guides(.), you are setting the shape
> >> after so it makes no difference.
> >>
> >>
> >> ggplot() +
> >>     geom_col(
> >>       data=test,
> >>       aes(x=Sample, y=value, fill=SSAtype),
> >>       position="dodge"
> >>     ) +
> >>     geom_pointrange(
> >>       data=test.ag,
> >>       aes(x=Sample, y=avg, ymin=avg-odch, ymax=avg+odch),
> >>       size = 2
> >>     ) +
> >>     scale_fill_manual(
> >>       #values=tablePal,
> >>       values = 2:3,
> >>       name="Calculation\n performed\n according to",
> >>       labels=c("bla", "blabla")
> >>     ) +
> >>     #guides(fill = guide_legend(override.aes = list(shape = NA))) +
> >>     scale_shape_manual(name = "Measured", values = 19, labels = NULL)
> >>
> >>
> >> Hope this helps,
> >>
> >> Rui Barradas
> >>
> >>
> >> Às 12:15 de 16/05/2022, PIKAL Petr escreveu:
> >>> Hallo all
> >>>
> >>>
> >>>
> >>> Here are the data from dput
> >>>
> >>>
> >>>
> >>> test <- structure(list(Sample = c("A", "A", "A", "A", "A", "A", "B",
> >>>
> >>> "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "C"), SSAtype =
> >>> c("one",
> >>>
> >>> "one", "one", "two", "two", "two", "one", "one", "one", "two",
> >>>
> >>> "two", "two", "one", "one", "one", "two", "two", "two"), value =
> >>> c(8.587645149,
> >>>
> >>> 8.743793651, 8.326440422, 9.255940687, 8.971931555, 8.856323865,
> >>>
> >>> 9.650809096, 9.725504448, 9.634449367, 9.69485369, 9.526758476,
> >>>
> >>> 10.03758001, 10.76845392, 10.66891602, 10.34894497, 10.76284989,
> >>>
> >>> 10.53074081, 11.16464528), SSAmeasuredP = c(8.3, 8.3, 8.3, 8.3,
> >>>
> >>> 8.3, 8.3, 9.5, 9.5, 9.5, 9.5, 9.5, 9.5, 11, 11, 11, 11, 11, 11
> >>>
> >>> ), identity = c("point", "point", "point", "point", "point",
> >>>
> >>> "point", "point", "point", "point", "point", "point", "point",
> >>>
> >>> "point", "point", "point", "point", "point", "point")), row.names =
> >>> c(NA,
> >>>
> >>> 18L), class = "data.frame")
> >>>
> >>>
> >>>
> >>> test.ag <- structure(list(Sample = c("A", "B", "C"), avg = c(8.3,
> >>> 9.5, 11
> >>>
> >>> ), odch = c(0.2, 0.4, 0.3), identity = c("point", "point", "point"
> >>>
> >>> )), row.names = c(NA, 3L), class = "data.frame")
> >>>
> >>>
> >>>
> >>> I try to make some relatively simple barplot and I wanted to add
> >>> points to it which I somehow did.
> >>>
> >>>
> >>>
> >>> library(ggplot2)
> >>>
> >>>
> >>>
> >>> p <- ggplot(test, aes(x=Sample, y=value, fill=SSAtype))
> >>>
> >>> p+geom_col(position="dodge")+geom_point(aes(y=SSAmeasuredP,
> >> shape=identity),
> >>> size=5)+
> >>>
> >>> scale_fill_manual(values=tablePal, name="Calculation\n performed\n
> >> according
> >>> to",
> >>>
> >>> labels=c("bla", "blabla"))+
> >>>
> >>> guides(fill= guide_legend(override.aes = list(shape=NA)))+
> >>>
> >>> scale_shape_manual(name = "Measured", values=19, labels=NULL)
> >>>
> >>>
> >>>
> >>> But instead of points I want to use pointrange with data from other
> >>> df. I found some help and all is good except size of the points and
> >>> missing
> >> legend
> >>>
> >>>
> >>>
> >>> ggplot()+
> >>>
> >>> geom_col(data=test, aes(x=Sample, y=value, fill=SSAtype),
> >> position="dodge")+
> >>>
> >>> scale_fill_manual(values=tablePal, name="Calculation\n performed\n
> >> according
> >>> to",
> >>>
> >>> labels=c("bla", "blabla"))+
> >>>
> >>> geom_pointrange(data=test.ag, aes(x=Sample, y=avg, ymin=avg-odch,
> >>>
> >>> ymax=avg+odch)) +
> >>>
> >>> guides(fill= guide_legend(override.aes = list(shape=NA)))+
> >>>
> >>> scale_shape_manual(name = "Measured", values=19, labels=NULL)
> >>>
> >>>
> >>>
> >>> Although I will try to find some workable way I also would like to
> >>> ask for help from R gurus, maybe I overlooked some simple way how to
> do it.
> >>>
> >>>
> >>>
> >>> Best regards
> >>>
> >>> Petr
> >>>
> >>>
> >>> ______________________________________________
> >>> 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.


More information about the R-help mailing list