我正在尝试使用ggplot2中的geom_path根据箭头的方向为代码涂色。我在单独的行中有多年的数据,并且希望有一个箭头,指示从最早的数据点到最新的数据点,并用彩色表示要使其更易于解释的方向。这些点是按Lake_ID分组的,并且因为每年都有很多行,所以我遇到了麻烦。
以下是基本数据:
Lake_ID Year Gear psd BioVolume
16 2012 EF 0.370967742 0.095585695
16 2012 GN 1 0.095585695
16 2012 TN 0 0.095585695
16 2012 Whole 0.375 0.095585695
16 2017 EF 0.214285714 0.100623115
16 2017 GN 1 0.100623115
16 2017 TN 0 0.100623115
16 2017 Whole 0.179487179 0.100623115
ggplot(blg.dup.year,aes(BioVolume,psd,group=Lake_ID,label=Year))+
geom_point(aes(BioVolume,psd,colour=Year))+theme_bw()+
facet_grid(Gear~.,scales = "free_y")+
labs(title="Bluegill PSD",y="PSD",x="Littoral BioVolume")+
geom_path(arrow=arrow(angle=30,length=unit(0.1,"inches"),
type="closed"),aes(group=Lake_ID))
谢谢!
答案 0 :(得分:0)
假设您所指的方向是此处箭头是向上还是向下,这是一种解决方案。 将原始图分配给变量:
p1 <- ggplot(blg.dup.year,aes(BioVolume,psd,group=Lake_ID,label=Year))+
geom_point(aes(BioVolume,psd,colour=Year))+theme_bw()+
facet_grid(Gear~.,scales = "free_y")+
labs(title="Bluegill PSD",y="PSD",x="Littoral BioVolume")+
geom_path(arrow=arrow(angle=30,length=unit(0.1,"inches"),
type="closed"),aes(group=Lake_ID))
从图层获取数据(您的箭头是第二个几何图形):
arrow_data <- layer_data(p1, 2)
从y轴获取方向,然后根据符号分配颜色:
directions <- diff(arrow_data$y)[seq(1,nrow(arrow_data),2)]
colors <- case_when(sign(directions) == -1 ~ "red",
sign(directions) == 0 ~ "orange",
sign(directions) == -1 ~ "green",
TRUE ~ "grey50")
您需要将颜色加倍,因为ggplot需要起点和终点的颜色。
colors <- rep(colors,each = 2)
最后将颜色添加到geom:
ggplot(blg.dup.year,aes(BioVolume,psd,group=Lake_ID,label=Year))+
geom_point(aes(BioVolume,psd,colour=Year))+theme_bw()+
facet_grid(Gear~.,scales = "free_y")+
labs(title="Bluegill PSD",y="PSD",x="Littoral BioVolume") +
geom_path(arrow=arrow(angle=30,length=unit(0.1,"inches"),
type="closed"),aes(group=Lake_ID), color = colors)
因此对于您的示例,您将获得: