繁体   English   中英

R:等高线图是下降点

[英]R: Contour Plot is Dropping Points

我正在绘制 x、y 和 z 维度中许多点的数据集。 对于每个 x 和 y,可以有多个 z。 我试图做的是将 xy 平面划分为 50x50 的网格,然后在等高线图中绘制每个框的 z 最大值。 我认为我在网上找到的下面的代码有效,但经过仔细检查,它看起来像是丢点或扭曲了数据。 我的代码有问题吗?

df<-eff[c("Xs",Ys","Zs")]
df$x<-cut(df$Xs, breaks=50, labels=FALSE)
df$y<-cut(df$Ys, breaks=50, labels=FALSE)
df.max<-expand.grid(x=1:50, y=1:50)
df.max<-merge(df.max, aggregate(Zs~x+y, df, max), all.x=TRUE)
z<-matrix(df.max$Zs, nr=50, nc=50)
x.values <- min(df$Xs)+(0:49)*diff(range(df$Xs))/50
y.values <- min(df$Ys)+(0:49)*diff(range(df$Ys))/50
image2D(x=x.values, y=y.values, z, rasterImage = TRUE, contour = list(lwd = 2, col = jet.col(11)),
    main="Contour Plot", xlab="Xs",ylab="Ys", clab="Zs", ylim=c(0,max(df$Ys)*1.05), 
    xlim=c(0,max(df$Xs)*1.05))

根据仅 xy 平面的图(我认为是正确的),等高线图的轮廓应如下所示:

在此处输入图片说明

请注意,它在 90k 附近与 y 轴相交,并且在 (25k,73k) 附近有一个最小值。

我来自相同数据的等高线图如下所示: 在此处输入图片说明

我目前没有可提供的示例数据,因为我的模型正在运行,我不想从头开始。 如有必要,我可以稍后添加示例。

这是 数据的链接

首先,既然你想取最大值,你可能应该去掉所有无用的信息。

library(dplyr)
df <- df %>% group_by(Xs, Ys) %>%
  summarize(Zs = max(Zs))

从这里你可以使用akima并简单地运行fld <- with(df, interp(x = Xs, y = Ys, z = Zs))并按照这个

然而,我的 R 会话一直崩溃,所以这里是一种近似的工作方式:

round_lvl_X = floor(diff(range(df$Xs))/51)
round_lvl_Y = floor(diff(range(df$Ys))/51)
df_summary <- df %>% 
  mutate(
    x = round(Xs/round_lvl_X)*round_lvl_X,
    y = round(Ys/round_lvl_Y)*round_lvl_Y
  ) %>%
  group_by(x, y) %>%
  summarize(z=max(Zs))

library(ggplot2)
ggplot(data=df_summary, aes(x=x, y=y, z=z)) + 
  geom_tile(aes(fill=z)) + 
  stat_contour()

这为您提供了“看起来”像您所追求的情节......

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM