首页 > 解决方案 > 数据不完整的水平图

问题描述

在 R 中使用 lattice 包:

我让自己深深陷入了兔子洞,现在我需要一些帮助才能脱身。

我有一些(昂贵的)数据点自然存在于 32x32 网格上,但我没有所有可能的数据点

> str(data)
'data.frame':   53 obs. of  3 variables:
$ X: num  16 16 16 16 13 13 13 13 23 23 ...
$ Y: num  20 16 23 10 16 23 20 10 16 23 ...
$ Z: num  1558 1561 1555 1540 1538 ...

当我尝试这样使用时levelplot

> levelplot(data$Z ~ rbind(data$X, data$X) * rbind(data$Y, data$Y), 
     xlim=c(0.5, 32.5), ylim=c(0.5, 32.5))

该情节以(对我而言)令人困惑的方式聚集了彩色补丁。水平图的输出

我想要实现的是,每个 1×1 索引对都有一个与我的数据相对应的彩色补丁。不存在的网格点可以保留为白色。

我试图理解 R 文档但已经放弃了。

此外,我尝试了一个带有 dummy 的网格NA,然后尝试填写相关数据点。就像是

> x <- seq(1, 32, length.out=32)
> y <- seq(1, 32, length.out=32)
> data <- expand.grid(X=x, Y=y)
> data$Z <- NA
> tmp <- res[selected_data, ]
> data[(data$X == tmp$X) & (data$Y == tmp$Y), 'Z'] <- tmp$Z
Error in `[<-.data.frame`(`*tmp*`, (data$X == tmp$Input_Channel) & (data$Y ==  : 
replacement has 53 rows, data has 1024

Whereres是数据点的来源,selected_data是用于从中选择数据的逻辑向量res。无论如何,这是行不通的。

无论如何,试图使后一种方法发挥作用是一个错误的转变。我宁愿有一个适当的解决方案,levelplot而不是我失败的工作。

标签: r

解决方案


我找到了一个可行的解决方案,我分享它来帮助他人:

> dataX <- c(seq(1, 32), rep(1, 32), tmp$X)
> dataY <- c(rep(1, 32), seq(1, 32), tmp$Y)
> dataZ <- c(rep(NA, 64), tmp$Z)
> levelplot(dataZ ~ dataX * dataY)

以这种方式添加NAs 可以得到所需的输出。来自 levelplot 的所需输出


推荐阅读