从“预网格”点创建曲面

时间:2016-08-12 11:26:47

标签: r image interpolation surface r-grid

我有一个很大的template<typename First, typename ...Args> S(T && t, Args && ...args) : S( std::is_same<int,std::remove_reference_t<std::remove_cv<T>>>(), std::forward<T>(t), std::forward<Args>(args)...) {} template<typename ...Args> S(std::false_type, int* const p, Args&&...args) //[A] template<typename ...Args> S(std::true_type, Args&&...args) //[B] ,其中包含3个变量data.frameLongitudeLatitude

数据的排列使其在1/4度的“网格”上有规律地间隔 - 以便Temp给出:

dput(head(dat))

我在重新安排所需格式时遇到问题。

我想创建一个常规曲面对象(通常是一个列表),其中x和y是网格值,z是曲面的对应矩阵。这是structure(list(Longitude = c(0.125, 0.375, 0.625, 0.875, 1.125, 1.375), Latitude = c(0.125, 0.125, 0.125, 0.125, 0.125, 0.125 ), Temp = c(25.2163, 25.1917, 25.1593, 25.125, 25.0908, 25.0612 )), .Names = c("Longitude", "Latitude", "Temp"), row.names = c(NA, 6L), class = "data.frame"). perspcontour等使用的常用格式。

使用此表面对象,我可以使用image包中的interp.surf轻松插入位置矩阵。

任何建议都会很棒。

1 个答案:

答案 0 :(得分:1)

假设您的数据类似于

set.seed(123)
d <- data.frame(lon=rep(seq(0,1,0.25), times=5),
           lat=rep(seq(0,1,0.25), each=5),
           temp=sample(1:25, 25, replace=TRUE))
head(d, 8)
#    lon  lat temp
# 1 0.00 0.00    8
# 2 0.25 0.00   20
# 3 0.50 0.00   11
# 4 0.75 0.00   23
# 5 1.00 0.00   24
# 6 0.00 0.25    2
# 7 0.25 0.25   14
# 8 0.50 0.25   23

我们创建一个z矩阵,表示网格中每个点的值。然后,我们将网格线(xy)的位置与z一起放入列表中。

library(reshape2)
z <- acast(d, lat~lon, value.var="temp")
X <- list(x=sort(unique(d$lon)), 
          y=sort(unique(d$lat)), 
          z=z)

image(X, col=gray.colors(25))
with(d, text(lon, lat, labels=temp))

enter image description here

另见Change Lat & Lon vectors to matrix in R