如何将连续色带应用于 ggplot2 中的直线?

How to apply a continous color ramp to a straight line in ggplot2?

我想在 ggplot2 中对垂直线应用连续色带。我的情节如下。我已将连续色带应用到 geom_line() 元素,而水平线表示色带覆盖的范围的限制并适当着色。我希望左侧的垂直线显示两条水平线之间的整个色带范围。

我尝试了 geom_segment(aes(color=dwsTempOutC))(dwsTempOutC 是我的 y 轴变量)但是正如您在图像中看到的那样,它只对线条应用了一种颜色。

我想我可以通过生成一系列短线段并将渐变中的离散颜色应用到每个线段来实现连续的颜色渐变,但我希望有一种不那么棘手的方法来做到这一点。

正如@stefan 已经在评论中建议的那样,我们可以使用 ggforce 包中的 geom_link2,这是一个示例:

library(tidyverse)
library(ggforce)

ggplot(mtcars, aes(x=cyl, y=mpg)) +
  geom_point()+
  geom_link2(aes(x = 5, y = mpg, colour = mpg), size=2)+
  scale_color_gradient2(midpoint=mid, low="green", mid="white",
                          high="red")

问题是当使用 geom_segment 时,只有一个段。但是,除了 ggforce::geom_link 之外,您还可以使用 geom_line:

获得相同的结果

使用一些假数据:

df <- data.frame(
  x = seq(0, 2 * pi, length.out = 100),
  y = sin(seq(0, 2 * pi, length.out = 100))
)

library(ggplot2)

ggplot(df, aes(x, y, color = y)) +
  geom_line() +
  geom_line(data = data.frame(x = -.5, y = seq(-1, 1, length.out = 100))) +
  scale_color_viridis_c()