r - 在 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")
)
解决方案
您可以使用该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"))))
)
这将产生以下图:
希望能帮助到你。
推荐阅读
- google-chrome - 如何让 Chrome 的自动完成下拉菜单仅在我开始输入后出现(而不是在最初的鼠标点击时)?
- android - RemoteViews setImageViewBitmap()不起作用
- dialogflow-es - 如何在 Dialogflow 数字字符串实体中支持“双”和“三”?
- azure-webjobs - 将 Azure 主题消息接收到 Web 作业中?
- php - Laravel simple validation doens't work on resource method
- python - Python Bot报错原因及解决方法
- exchangelib - Python exchangelib 推送通知?
- html - 没有连接到模型或链接的轨道形式
- spring-security - 如何向我的服务提供商验证角色/权限信息 wso2 身份服务器?
- html - 悬停不适用于列表中的所有元素