【问题标题】:How can I plot a smooth line over plot points, like a contour/skyline of the plot?如何在绘图点上绘制平滑线,例如绘图的轮廓/天际线?
【发布时间】:2021-02-17 19:08:32
【问题描述】:

我正在寻找的最好用一张图片来解释:一条“轮廓”我的点的最大值的线(比如给出情节的“天际线”)。我有一个散点图,其中密集,(大部分)唯一的 x 坐标(在任一轴上分布不均)。我想在这个情节上画一条红线:

到目前为止,我尝试/想到的是,由于具有唯一 x 值和许多局部最大值和最小值的数据的密集性质(基本上在每个点),简单的“画线”方法失败了)。同样的事实使得单纯的“获得最大”方法是不可能的。

因此我要问:是否有某种情节平滑选项?或者任何现有的“天际线”算子?

我特别不是在寻找“等高线图”或“天际线图”(如贝叶斯天际线图) - 这些术语实际上会描述我想要的,但不幸的是已经用于其他事情。 em>

这是迄今为止我正在使用的最小版本,lines 的负面示例没有给出预期的结果。我上传了样本数据here

load("xy_lidarProfiles.RData")
plot(x, y, 
          xlab="x", ylab="y", # axis
          pch = 20, # point marker style (1 - 20)
          asp = 1 # aspect of x and y ratio
)
lines(x, y, type="l", col = "red") # makes a mess

【问题讨论】:

    标签: r plot max


    【解决方案1】:

    如果您order() x 值,您将接近您想要的结果。你想要的是一个运行最大值,TTR::runMax() 提供。

    plot(x[order(x)], y[order(x)], pch=20)
    lines(x[order(x)], TTR::runMax(y[order(x)], n=10), col="red", lwd=2)
    

    您可以使用n= 参数调整窗口。

    【讨论】:

    • 不错的解决方案。更一般地说,如果局部最大值不是您想要的(例如不够平滑),zoo::rollapply 函数可以找到其他局部信封。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    相关资源
    最近更新 更多