首页 > 解决方案 > 在 ggplot 中按形状添加图例(在后面添加第二个问题:计算数字导数)

问题描述

我尝试按形状添加图例。

尽管有两个形状和两个 y 轴,但我有一个带有一个图例的图形。

在此处输入图像描述

我想要两组图例,每个 y 轴一组。

在此处输入图像描述

编辑:问题2后添加

2)实际上它是用于显示数字导数,即calc=t/10用一个函数替换 my

f(x)=(t_n-t_n-1)/(date_time_n / date_time_n -1)

其中 f(x) 将是我的计算列。

但我想我不明白 R 中的派生。

我的下一个问题是:如何按组在 R 中编写更简单的派生(在 R、ggplot、dplyr、tidyverse 中)?

编辑结束

这是我的代表

library(tidyverse)
library(ggplot2)

datas<-data.frame(
  t = c(
    50 + c(0, cumsum(runif(9, -7, 7))),
    70 + c(0, cumsum(runif(9, -10, 10)))
  ),
  orig=c(rep("s1",10),rep("s2",10)),
  date_heure = rep(
    seq(from=as.POSIXct("2012-1-1 0:00", tz="UTC"),by="hour", length=10) ,
    2
  ) 
)


datas<- (datas 
         %>% mutate (
           calc=t/10
         )
)

(
  ggplot(datas) 
  +   geom_line(aes(x = date_heure, y = t,colour=orig))
  +   geom_line(aes(x = date_heure, y = calc, color=orig))
  + scale_y_continuous(
    name = "t", 
    sec.axis = sec_axis(trans=~(range(datas$calc)), 
                        name = "calc ")
  )
  + geom_point(mapping = aes(x = date_heure, y = calc,color=orig), shape = 21, fill = "white") 
)

标签: rggplot2

解决方案


您可以使用该linetype属性并手动分配图例名称和线条颜色,如下所示:

(
  ggplot(datas) 
  +   geom_line(mapping=aes(x = date_heure, y = t, color=orig, linetype = "s1"))
  +   geom_line(mapping=aes(x = date_heure, y = calc, color=orig, linetype = "s2"))
  +   scale_y_continuous(name = "t", sec.axis = sec_axis(trans=~(range(datas$calc)), name = "calc"))
  +   geom_point(mapping = aes(x = date_heure, y = calc, color=orig), shape = 21, fill = "white")
  +   scale_color_manual(name = "calc", values=c("red", "blue"))
  +   scale_linetype_manual(name = "orig", values = c('solid', 'solid'), 
                            guide = guide_legend(override.aes = list(colour=c("red", "blue"))))

)

这将产生以下图:

在此处输入图像描述

希望能帮助到你。


推荐阅读