[R] overlaying two graphs / plots /lines

Bogdan Tanasa t@n@@@ @end|ng |rom gm@||@com
Wed Feb 8 00:39:34 CET 2023


Thanks a lot Rui and Jim. Works great !

On Tue, Feb 7, 2023, 1:34 PM Rui Barradas <ruipbarradas using sapo.pt> wrote:

> Às 21:18 de 07/02/2023, Jim Lemon escreveu:
> > Hi Bogdan,
> > Try this:
> >
> > A<-data.frame(x=c(1,7,9,20),
> >   y=c(39,91,100,3))
> > B<-data.frame(x=c(10,21,67,99,200),
> >   y=c(9,89,1000,90,1001)) # one value omitted to equalize the rows
> > xrange<-range(c(unlist(A$x),unlist(B$x)))
> > yrange<-range(c(unlist(A$y),unlist(B$y)))
> > plot(A,type="l",xlim=xrange,ylim=yrange,col="red")
> > lines(B,lty=2,col="blue")
> > legend(150,400,c("A","B"),lty=1:2,col=c("red","blue"))
> >
> > There are other tricks to deal with the differences in range between A
> and B.
> >
> > Jim
> >
> > On Wed, Feb 8, 2023 at 7:57 AM Bogdan Tanasa <tanasa using gmail.com> wrote:
> >>
> >>   Dear all,
> >>
> >> Any suggestions on how I could overlay two or more graphs / plots /
> lines
> >> that have different sizes and the x axes have different breakpoints.
> >>
> >> One dataframe is : A :
> >>
> >> on x axis : 1 , 7, 9, 20, etc ... (100 elements)
> >> on y axis : 39, 91, 100, 3, etc ... (100 elements)
> >>
> >>
> >> The other dataframe is : B :
> >>
> >> on x axis : 10, 21, 67, 99, 200 etc .. (200 elements).
> >> on y axis :  9, 0, 89, 1000, 90, 1001. ... (200 elements).
> >>
> >> Thanks a lot,
> >>
> >> Bogdan
> >>
> >>          [[alternative HTML version deleted]]
> >>
> >> ______________________________________________
> >> 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.
> >
> > ______________________________________________
> > 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.
> Hello,
>
> Here is a ggplot way.
> I'll use the same data.
>
> On each data.frame, create an id column, saying which df it is.
>
>
> A<-data.frame(x=c(1,7,9,20),
>                y=c(39,91,100,3))
> B<-data.frame(x=c(10,21,67,99,200),
>                y=c(9,89,1000,90,1001)) # one value omitted to equalize
> the rows
>
> suppressPackageStartupMessages({
>    library(dplyr)
>    library(ggplot2)
> })
>
> bind_rows(
>    A %>% mutate(id = "A"),
>    B %>% mutate(id = "B")
> )
> #>     x    y id
> #> 1   1   39  A
> #> 2   7   91  A
> #> 3   9  100  A
> #> 4  20    3  A
> #> 5  10    9  B
> #> 6  21   89  B
> #> 7  67 1000  B
> #> 8  99   90  B
> #> 9 200 1001  B
>
>
> To do this in a pipe doesn't change the original data.
> Then pipe the result to ggplot separating the lines by mapping id to
> color. ggplot will automatically take care of the axis ranges.
>
>
> bind_rows(
>    A %>% mutate(id = "A"),
>    B %>% mutate(id = "B")
> ) %>%
>    ggplot(aes(x, y, colour = id)) +
>    geom_line() +
>    theme_bw()
>
>
> Hope this helps,
>
> Rui Barradas
>
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list