剪辑/限制 Geom_Line 绘图

Posted

技术标签:

【中文标题】剪辑/限制 Geom_Line 绘图【英文标题】:Clip/ Limit Geom_Line plotting 【发布时间】:2016-09-19 10:30:03 【问题描述】:

我想制作一个线图,我需要在某些 y 值下方/上方剪辑一些线。举个例子

  x <- c(1,2,3,4,5,6,7,8,9,10)
    y1 <- c(1,2,3,4,5,6,7,8,9,10)
    y2 <- c(2,4,6,8,10,12,14,16,18,20)
    df <- data_frame(x, y1, y2)

    #make plot for df
    ggplot(data=df, aes(x=x, group=1)) +

#plot y=x
    geom_line(data=df, aes(x=x, y=y1, colour="red"))+

#plot y=2x for values of y equal to/ above 3
    geom_line(data=df, aes(x=x, y=y2 >=3, colour="blue"))

显然这不起作用,但有可能吗?如果是这样,怎么办?显而易见的解决方案是编辑数据框本身,但对于我的最终目标,这将不起作用。另一种解决方案是使绘图在 y=3 以上不可见(在这种情况下),但不确定这是否可能

抱歉,如果之前有人问过。我试着四处寻找,但没有找到任何东西。非常感谢,

【问题讨论】:

【参考方案1】:

一种可能的解决方案是考虑您的状况并使用它来为线条着色:

ggplot(data=df, aes(x=x, y=y2, group=1)) +
  geom_line(aes(color = factor(y2 >= 3)))

给出:


重新阅读您的问题后,我想我可能误解了它。稍微调整您的代码以仅包含等于或大于 3 的值:

ggplot(data=df, aes(x=x, y=y1)) +
  geom_line(colour="red")+
  geom_line(data=df[df$y2 >= 3,], aes(x=x, y=y2), colour="blue")

给出:

【讨论】:

ahhh 一直有一个简单的解决方案 :) 谢谢 - 看起来这应该非常适合我想要的(第一部分也很有用:D) ahhh,这实际上并没有达到我想要的效果,直到现在我才真正意识到。是否可以在没有 x=1.5, y=3 的值的情况下从 y=3 向上绘制 y=2x 的线。即正常画线,然后为 y=3 引入高通滤波器 @RobertHickman 您指的是答案的哪一部分? “高通滤波器”是什么意思?请更清楚地说明您想要实现的目标。 抱歉解释不力。我在示例中尝试做的是绘制 y=2x 线,但随后仅显示 y 大于等于 3 的值(即使 y=3 处没有数据点)。您发布的解决方案会跳转到下一个数据点 (x=2, y=4)。我真的不知道如何描述我想要它做什么,但基本上数据会导致绘制白线,而我只想显示黑色区域 (imgur.com/u8KJKQg)

以上是关于剪辑/限制 Geom_Line 绘图的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenGL ES 中,如何将绘图“剪辑”到矩形?

没有数据时如何避免geom_line或geom_path中的连接线?

绘图框外的 Coreplot 图例绘图

Geom_line 基于 y 轴连接几何点?

Canvas系列 | 剪辑区域函数clip

更改R中另一个绘图中单击的绘图限制