使用不同颜色的线段绘制Y轴

4

通常您可以使用以下代码更改整个坐标轴线的颜色:

theme(axis.line.y = element_line(color = "gray", size = 1))

但是,我想绘制一个 Y 轴,其中不同部分具有不同的颜色。例如,在 0 以下是蓝色的线条,在 0 以上是红色的线条。下面是一个小例子,其中坐标轴已经被手动地"涂色":

df <- data.frame(x = 1:8, y = -3:4)

ggplot(df, aes(x, y)) +
    geom_point()

在此输入图片描述

非常感谢!

编辑:Allan Cameron的答案是正确的,但对我来说不起作用,因为我的时间序列图的x轴是时间格式(POSIXct)。他的帖子给了我一些想法,我觉得我用一些技巧把它搞定了。以下是我的做法,可以根据不同情况/范围进行调整。需要使用 "lubridate" 包添加/减去时间。

  1. 获取x轴的最小值和最大值:

minX <- min(myData$Timestamp)

maxX <- max(myData$Timestamp)

  1. 设置限制:

lim <- as.POSIXct(c(minX -minutes (5), maxX), origin = "1970-01-01")

  1. 像这样使用coord_cartesian:

+ coord_cartesian(xlim=c(minX - minutes(5), maxX),c(60,100), expand = FALSE)

  1. 绘制线条:

+ geom_segment(aes(x = minX - minutes(5), y = 60, xend = minX - minutes(5), yend = 70), size = 1, color = "red"

请记住,这是我的用例。我可能需要进行调整(并更改此帖子)。

1个回答

6
如果你想要两个颜色,就需要两条线。由于不能有两个坐标轴线,所以需要将线段绘制为两个颜色,如下所示的reprex:
library(ggplot2)

df <- data.frame(x = 0:10, y = 0:10)

ggplot(df, aes(x, y)) +
  geom_point() +
  geom_segment(aes(x = 0, y = 0, xend = 0, yend = 2), size = 2, color = "red") +
  geom_segment(aes(x = 0, y = 2, xend = 0, yend = 10), size = 2, color = "blue") +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0)) +
  theme(axis.line.y = element_blank(),
        axis.line.x = element_line())

这是由reprex软件包 (v0.3.0)在2020年08月07日创建的。


谢谢,但这对我不起作用,因为我不能使用x=0。我的x轴是POSIXct(抱歉,我忘了提到这一点)。对于geom_segment,我会收到以下错误提示:“无效输入:time_trans仅适用于类POSIXct的对象”。x轴最小值不是轴起始位置。 - kon
好的,经过一些尝试,我认为我已经得到了可行的解决方案。我仍然会将您的帖子标记为解决方案,因为问题/环境不太清楚(写论文可能会改变人..) - kon
1
@kon 谢谢。这对于日期时间轴仍然适用。您只需使用日期时间而不是 0 作为 x 值即可。 - Allan Cameron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接