簡體   English   中英

在不規則網格上繪制和着色數據

[英]plotting and coloring data on irregular grid

我有(x,y,z)形式的數據,其中x和y不在常規網格上。 我希望顯示這些數據的2D顏色圖,並將強度(例如灰度)映射到z變量。 一個明顯的解決方案是在常規網格上進行插值(請參見下文),

d <- data.frame(x=runif(1e3, 0, 30), y=runif(1e3, 0, 30))
d$z = (d$x - 15)^2 + (d$y - 15)^2


library(akima)
d2 <- with(d, interp(x, y, z, xo=seq(0, 30, length = 30),
                     yo=seq(0, 30, length = 50), duplicate="mean"))

pal1 <- grey(seq(0,1,leng=500))
with(d2, image(sort(x), sort(y), z, useRaster=TRUE, col = pal1))
points(d$x, d$y, col="white", bg=grey(d$z/max(d$z)), pch=21, cex=1,lwd=0.1)

在此處輸入圖片說明

但是,這會丟失初始網格的信息(具有實際數據的點的位置),該信息在某些位置可能非常好或非常粗糙。 我更喜歡使用三角形的Delaunay拼貼,該拼貼可准確表示原始數據點的實際位置和密度。

理想的解決方案是

  • 計算繪圖功能的鑲嵌外部,使得所得到的多邊形可以與任一被繪制ggplot2lattice ,或鹼圖形

  • 快點。 在我的實際示例中(〜1e5點),通過deldir進行deldir的計算可能真的很慢。

“鑲嵌”是指Delaunay三角形或Voronoi圖,盡管我更喜歡前者。 但是,這會帶來額外的復雜性,即根據原始數據點對每個三角形的顏色進行插值。

下面是基於解決方案dirichletmaptools包,

d <- data.frame(x=runif(1e3, 0, 30), y=runif(1e3, 0, 30))
d$z = (d$x - 15)^2 + (d$y - 15)^2

library(spatstat) 
library(maptools)

W <- ripras(df, shape="rectangle") 
W <- owin(c(0, 30), c(0, 30)) 
X <- as.ppp(d, W=W) 
Y <- dirichlet(X) 
Z <- as(Y, "SpatialPolygons") 
plot(Z, col=grey(d$z/max(d$z)))

Dirichlet

我仍然不確定從該SpatialPolygons類提取多邊形的方法。

另外,如果有一種簡單的方法可以為相關的delaunay鑲嵌生成“正確”的顏色,我想聽聽。

這是使用deldir的晶格解決方案

d <- data.frame(x=runif(1e3, 0, 30), y=runif(1e3, 0, 30))
d$z = (d$x - 15)^2 + (d$y - 15)^2

pal1 <- grey(seq(0,1,leng=500))
library(latticeExtra)

 levelplot(z~x*y, data=d,
           panel = function(...) panel.voronoi(..., points=FALSE),
           interpolate=TRUE,
           col.regions = colorRampPalette(pal1)(1e3), cut=1e3)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM