stat_contour无法生成等高线

stat_contour无法生成等高线,r,ggplot2,contour,R,Ggplot2,Contour,我需要通过stat\u contour()向我的ggplot/ggplot2-plot添加线条。不幸的是,我不能给你真实的数据,从这些数据中应该评估点值。然而,另一个容易被谴责的例子的行为是相同的: testPts <- data.frame(x=rep(seq(7.08, 7.14, by=0.005), 200)) testPts$y <- runif(length(testPts$x), 50.93, 50.96) testPts$z <- sin(testPts$y *

我需要通过
stat\u contour()
向我的
ggplot
/
ggplot2
-plot添加线条。不幸的是,我不能给你真实的数据,从这些数据中应该评估点值。然而,另一个容易被谴责的例子的行为是相同的:

testPts <- data.frame(x=rep(seq(7.08, 7.14, by=0.005), 200))
testPts$y <- runif(length(testPts$x), 50.93, 50.96)
testPts$z <- sin(testPts$y * 500)

ggplot(data=testPts, aes(x=x, y=y, z=z)) + geom_point(aes(colour=z))
       + stat_contour()

testPts您应该使用
expand.grid
outer
为x和y的每个组合生成一个z。例如:

library(ggplot2)
testPts <- transform(expand.grid(x=1:10,y=1:5),z=sin(x*y))
(ggplot(data=testPts, aes(x=x, y=y, z=z))
 + stat_contour()
 + geom_point(aes(colour=z))
)
库(ggplot2)
testPts使用间隔不规则的数据,而不是
stat\u contour

library(ggplot2)

testPts <- data.frame(x=rep(seq(7.08, 7.14, by=0.005), 200))
testPts$y <- runif(length(testPts$x), 50.93, 50.96)
testPts$z <- sin(testPts$y * 500)

(ggplot(data=testPts, aes(x=x, y=y, z=z))
+ geom_point(aes(colour=z))
+ stat_density2d()
)
库(ggplot2)

testPts该问题的一种解决方案是生成规则网格,并根据该网格插值点值。下面是我如何为多个数据字段中的一个字段执行此操作的:

pts.grid <- interp(as.data.frame(pts)$coords.x1, as.data.frame(pts)$coords.x2, as.data.frame(pts)$GWLEVEL_TI)
pts.grid2 <- expand.grid(x=pts.grid$x, y=pts.grid$y)
pts.grid2$z <- as.vector(pts.grid$z)

这个解决方案很可能包括不必要的转换,因为我还不太清楚。此外,在再次将每个数据字段合并到单个数据帧中之前,我必须为每个数据字段单独生成相同的网格-效率不如我希望的更大数据集的效率。

尽管这样做有效,但这并不能解释我前面提到的数据帧不足的原因。每个
x
y
都有其
z
。我用ggplot2中的公共点图测试了它。实际的shapefile数据(空间数据帧)也是如此。在我看来,
stat\u contour()
需要等距网格,而不是简单地获取不规则分布的公共2D点。老兄,这使得功能极其有限。我曾经遇到过这样的情况,即
stat\u contour
的结果非常差,但基本图形contour提供了一个很好的解决方案。事实证明,有一个函数
轮廓线
可以获取轮廓线的数据。然后你可以用这条线和几何线一起画出来。@,你能检查一下这些吗?我尝试了@的方法,但无法用颜色绘制轮廓。我应该发布一个新问题来解释我的数据集吗?我也在尝试
plotly
,但不知道它与
ggplot2
相比是否有优势!我来问这个问题是因为我有同样的问题,这篇文章让我得到了我需要的东西,使这项工作:。关键的是,它使用了一个黄土模型来帮助生成我可以使用的网格,而这似乎是缺少的一环。我所看到的等高线图函数都需要一个网格,因此您需要从分散点的长数据帧中以某种方式生成一个网格。它似乎无法提供合理的结果。完美的等高线解应该是水平直线。此外,该函数在美学上似乎有点不灵活。例如,当预先定义Id时,Id对aes(size=z)
没有一点反应。这是令人困惑的,因为文档中列出的参数完全是“可以理解的”。我正在慢慢理解..level..的含义。。和..密度。。现在。
stat\u density()
-函数以填充多边形轮廓和彩色轮廓线的方式工作。但是,动态计算的
.level..
不在原始值范围内。它不能反映我观察到的地下水位的流场。我的猜测是:核密度估计是按照它的名字来做的(我不知道细节):它反映的是点密度,而不是数据场相关的轮廓。在这种情况下,这将不是我一开始想要的。你可能想要插值Z值(例如,反距离加权,克里格法),而不是进行密度估计。您可能需要在
ggplot
之外执行此操作,然后添加图层。查看反向距离加权的示例。我不同意stat_density2d是他想要的。stat_density2d中的等高线表示每个网格区域的点密度@Florian R.Klein要求等高线通过相等的z,例如高程等高线。
(ggplot(as.data.frame(pts), aes(x=coords.x1, y=coords.x2, z=GWLEVEL_TI))
#+ geom_tile(data=na.omit(pts.grid2), aes(x=x, y=y, z=z, fill=z))
+ stat_contour(data=na.omit(pts.grid2), binwidth=2, colour="red", aes(x=x, y=y, z=z))
+ geom_point()
)