r - 数据不完整的水平图
问题描述
在 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
而不是我失败的工作。
解决方案
我找到了一个可行的解决方案,我分享它来帮助他人:
> 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)
以这种方式添加NA
s 可以得到所需的输出。来自 levelplot 的所需输出
推荐阅读
- ms-access - 引用连接查询的 MS Access Dlookup
- docker - 如何使用特定用户组挂载文件
- java - 如何在 IDE 外使用 Java Mail 发送邮件
- python-3.x - 什么是自然语言处理上下文中的词注入,它的应用是什么?
- angular - Angular 2+在switchMap中启动带有间隔的可观察函数
- postman - Postman 401 未经授权使用 Ocelot
- java - 此环境中未提供编译器
- amazon-web-services - 使用具有 IAM 角色的 S3cmd 访问存储桶
- laravel - Laravel 如何将 onDelete('cascade') 修改为无操作迁移?
- lua - PICO-8 按下按钮仅显示一次文本输出?