dual y-axis for ggplot

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

dual y-axis for ggplot

miao
Hi,

   To my knowledge, an excellent of ggplot with a second y-axis is

https://rpubs.com/MarkusLoew/226759

   In this example, the author uses two colors for the two lines, but the
line shapes are the same -- both are solid. Could each line have its own
color as well as its own shape? For example, can I make the red line with
the linetype "twodash", while the blue line with the linetype "solid"?
   For convenience, I copied the codes as follows.

########
p <- ggplot(obs, aes(x = Timestamp))
  p <- p + geom_line(aes(y = air_temp, colour = "Temperature"))

  # adding the relative humidity data, transformed to match roughly the
range of the temperature
  p <- p + geom_line(aes(y = rel_hum/5, colour = "Humidity"))

  # now adding the secondary axis, following the example in the help file
?scale_y_continuous
  # and, very important, reverting the above transformation
  p <- p + scale_y_continuous(sec.axis = sec_axis(~.*5, name = "Relative
humidity [%]"))

  # modifying colours and theme options
  p <- p + scale_colour_manual(values = c("blue", "red"))
  p <- p + labs(y = "Air temperature [°C]",
                x = "Date and time",
                colour = "Parameter")
  p <- p + theme(legend.position = c(0.8, 0.9))
p
########

   Thanks,

John

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: dual y-axis for ggplot

miao
Sorry let me clarify.
If I modify the line
 p <- p + geom_line(aes(y = air_temp, colour = "Temperature"))
by
p <- p + geom_line(aes(y = air_temp, colour = "Temperature", linetype
="Temperature"))
and
p <- p + geom_line(aes(y = rel_hum/5, colour = "Humidity"))
by
p <- p + geom_line(aes(y = rel_hum/5, colour = "Humidity",
linetype="Humidity"))
and
p <- p + scale_linetype_manual(values = c("twodash", "solid")),

I will have two lines with different color and different line type,

but I will have two legends  (one with blue/red,solid, the other with two
dash/solid, black ).

How can I have only one legend with blue/two dash and red/solid?




2017-10-12 0:06 GMT-07:00 John <[hidden email]>:

> Hi,
>
>    To my knowledge, an excellent of ggplot with a second y-axis is
>
> https://rpubs.com/MarkusLoew/226759
>
>    In this example, the author uses two colors for the two lines, but the
> line shapes are the same -- both are solid. Could each line have its own
> color as well as its own shape? For example, can I make the red line with
> the linetype "twodash", while the blue line with the linetype "solid"?
>    For convenience, I copied the codes as follows.
>
> ########
> p <- ggplot(obs, aes(x = Timestamp))
>   p <- p + geom_line(aes(y = air_temp, colour = "Temperature"))
>
>   # adding the relative humidity data, transformed to match roughly the
> range of the temperature
>   p <- p + geom_line(aes(y = rel_hum/5, colour = "Humidity"))
>
>   # now adding the secondary axis, following the example in the help file
> ?scale_y_continuous
>   # and, very important, reverting the above transformation
>   p <- p + scale_y_continuous(sec.axis = sec_axis(~.*5, name = "Relative
> humidity [%]"))
>
>   # modifying colours and theme options
>   p <- p + scale_colour_manual(values = c("blue", "red"))
>   p <- p + labs(y = "Air temperature [°C]",
>                 x = "Date and time",
>                 colour = "Parameter")
>   p <- p + theme(legend.position = c(0.8, 0.9))
> p
> ########
>
>    Thanks,
>
> John
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: dual y-axis for ggplot

Eric Berger
Hi John,
You can try the following:

override.linetype=c("twodash","solid")
p <- ggplot(obs, aes(x = Timestamp))
p <- p + geom_line(aes(y = air_temp, colour = "Temperature", linetype
="Temperature"))
p <- p + geom_line(aes(y = rel_hum/5, colour = "Humidity",
linetype="Humidity"))
p <- p +
guides(colour=guide_legend(override.aes=list(linetype=override.linetype)))
p <- p + scale_colour_manual(values = c("blue", "red"))
p <- p + scale_linetype_manual(values = c("twodash", "solid"),guide=FALSE)
p

I searched for help and used the info I found at this link:
https://stackoverflow.com/questions/37140266/how-to-merge-color-line-style-and-shape-legends-in-ggplot

HTH,
Eric



On Thu, Oct 12, 2017 at 10:14 AM, John <[hidden email]> wrote:

> Sorry let me clarify.
> If I modify the line
>  p <- p + geom_line(aes(y = air_temp, colour = "Temperature"))
> by
> p <- p + geom_line(aes(y = air_temp, colour = "Temperature", linetype
> ="Temperature"))
> and
> p <- p + geom_line(aes(y = rel_hum/5, colour = "Humidity"))
> by
> p <- p + geom_line(aes(y = rel_hum/5, colour = "Humidity",
> linetype="Humidity"))
> and
> p <- p + scale_linetype_manual(values = c("twodash", "solid")),
>
> I will have two lines with different color and different line type,
>
> but I will have two legends  (one with blue/red,solid, the other with two
> dash/solid, black ).
>
> How can I have only one legend with blue/two dash and red/solid?
>
>
>
>
> 2017-10-12 0:06 GMT-07:00 John <[hidden email]>:
>
> > Hi,
> >
> >    To my knowledge, an excellent of ggplot with a second y-axis is
> >
> > https://rpubs.com/MarkusLoew/226759
> >
> >    In this example, the author uses two colors for the two lines, but the
> > line shapes are the same -- both are solid. Could each line have its own
> > color as well as its own shape? For example, can I make the red line with
> > the linetype "twodash", while the blue line with the linetype "solid"?
> >    For convenience, I copied the codes as follows.
> >
> > ########
> > p <- ggplot(obs, aes(x = Timestamp))
> >   p <- p + geom_line(aes(y = air_temp, colour = "Temperature"))
> >
> >   # adding the relative humidity data, transformed to match roughly the
> > range of the temperature
> >   p <- p + geom_line(aes(y = rel_hum/5, colour = "Humidity"))
> >
> >   # now adding the secondary axis, following the example in the help file
> > ?scale_y_continuous
> >   # and, very important, reverting the above transformation
> >   p <- p + scale_y_continuous(sec.axis = sec_axis(~.*5, name = "Relative
> > humidity [%]"))
> >
> >   # modifying colours and theme options
> >   p <- p + scale_colour_manual(values = c("blue", "red"))
> >   p <- p + labs(y = "Air temperature [°C]",
> >                 x = "Date and time",
> >                 colour = "Parameter")
> >   p <- p + theme(legend.position = c(0.8, 0.9))
> > p
> > ########
> >
> >    Thanks,
> >
> > John
> >
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: dual y-axis for ggplot

miao
Thanks, Eric! It works well.

2017-10-12 9:13 GMT-07:00 Eric Berger <[hidden email]>:

> Hi John,
> You can try the following:
>
> override.linetype=c("twodash","solid")
> p <- ggplot(obs, aes(x = Timestamp))
> p <- p + geom_line(aes(y = air_temp, colour = "Temperature", linetype
> ="Temperature"))
> p <- p + geom_line(aes(y = rel_hum/5, colour = "Humidity",
> linetype="Humidity"))
> p <- p + guides(colour=guide_legend(override.aes=list(linetype=
> override.linetype)))
> p <- p + scale_colour_manual(values = c("blue", "red"))
> p <- p + scale_linetype_manual(values = c("twodash", "solid"),guide=FALSE)
> p
>
> I searched for help and used the info I found at this link:
> https://stackoverflow.com/questions/37140266/how-to-
> merge-color-line-style-and-shape-legends-in-ggplot
>
> HTH,
> Eric
>
>
>
> On Thu, Oct 12, 2017 at 10:14 AM, John <[hidden email]> wrote:
>
>> Sorry let me clarify.
>> If I modify the line
>>  p <- p + geom_line(aes(y = air_temp, colour = "Temperature"))
>> by
>> p <- p + geom_line(aes(y = air_temp, colour = "Temperature", linetype
>> ="Temperature"))
>> and
>> p <- p + geom_line(aes(y = rel_hum/5, colour = "Humidity"))
>> by
>> p <- p + geom_line(aes(y = rel_hum/5, colour = "Humidity",
>> linetype="Humidity"))
>> and
>> p <- p + scale_linetype_manual(values = c("twodash", "solid")),
>>
>> I will have two lines with different color and different line type,
>>
>> but I will have two legends  (one with blue/red,solid, the other with two
>> dash/solid, black ).
>>
>> How can I have only one legend with blue/two dash and red/solid?
>>
>>
>>
>>
>> 2017-10-12 0:06 GMT-07:00 John <[hidden email]>:
>>
>> > Hi,
>> >
>> >    To my knowledge, an excellent of ggplot with a second y-axis is
>> >
>> > https://rpubs.com/MarkusLoew/226759
>> >
>> >    In this example, the author uses two colors for the two lines, but
>> the
>> > line shapes are the same -- both are solid. Could each line have its own
>> > color as well as its own shape? For example, can I make the red line
>> with
>> > the linetype "twodash", while the blue line with the linetype "solid"?
>> >    For convenience, I copied the codes as follows.
>> >
>> > ########
>> > p <- ggplot(obs, aes(x = Timestamp))
>> >   p <- p + geom_line(aes(y = air_temp, colour = "Temperature"))
>> >
>> >   # adding the relative humidity data, transformed to match roughly the
>> > range of the temperature
>> >   p <- p + geom_line(aes(y = rel_hum/5, colour = "Humidity"))
>> >
>> >   # now adding the secondary axis, following the example in the help
>> file
>> > ?scale_y_continuous
>> >   # and, very important, reverting the above transformation
>> >   p <- p + scale_y_continuous(sec.axis = sec_axis(~.*5, name = "Relative
>> > humidity [%]"))
>> >
>> >   # modifying colours and theme options
>> >   p <- p + scale_colour_manual(values = c("blue", "red"))
>> >   p <- p + labs(y = "Air temperature [°C]",
>> >                 x = "Date and time",
>> >                 colour = "Parameter")
>> >   p <- p + theme(legend.position = c(0.8, 0.9))
>> > p
>> > ########
>> >
>> >    Thanks,
>> >
>> > John
>> >
>>
>>         [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> [hidden email] 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/posti
>> ng-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.