2016-05-25 3 views
2

Я хотел бы создать 2D-уровень в R, где координаты x и y - из нерегулярной сетки без использования интерполяции. Ниже приводится сетка:Levelplot in R на нерегулярной сетке

grid<-cbind(seq(from=0.05,to=0.5,by=0.05),seq(from=0.05,to=0.5,by=0.05)) 
grid<-rbind(grid,cbind(seq(from=0.0,to=0.95,by=0.05),seq (from=0.05,to=1,by=0.05))) 
grid<-rbind(grid,cbind(seq(from=0,to=0.9,by=0.05),seq (from=0.1,to=1,by=0.05))) 
grid<-rbind(grid,cbind(seq(from=0,to=0.85,by=0.05),seq(from=0.15,to=1,by=0.05))) 
grid<-rbind(grid,cbind(seq(from=0,to=0.75,by=0.05),seq(from=0.25,to=1,by=0.05))) 
grid<-rbind(grid,cbind(seq(from=0,to=0.80,by=0.05),seq(from=0.20,to=1,by=0.05))) 
grid<-rbind(grid,cbind(seq(from=0,to=0.70,by=0.05),seq(from=0.30,to=1,by=0.05))) 
grid<-rbind(grid,cbind(seq(from=0,to=0.65,by=0.05),seq(from=0.35,to=1,by=0.05))) 
grid<-rbind(grid,cbind(seq(from=0,to=0.60,by=0.05),seq(from=0.40,to=1,by=0.05))) 
grid<-rbind(grid,cbind(seq(from=0,to=0.55,by=0.05),seq(from=0.45,to=1,by=0.05))) 
grid<-rbind(grid,cbind(seq(from=0,to=0.50,by=0.05),seq(from=0.50,to=1,by=0.05))) 
grid<-rbind(grid,cbind(seq(from=0,to=0.40,by=0.05),seq(from=0.60,to=1,by=0.05))) 
grid<-rbind(grid,cbind(seq(from=0,to=0.45,by=0.05),seq(from=0.55,to=1,by=0.05))) 
grid<-rbind(grid,cbind(seq(from=0,to=.35,by=0.05),seq(from=0.65,to=1,by=0.05))) 
grid<-rbind(grid,cbind(seq(from=0,to=0.30,by=0.05),seq(from=0.70,to=1,by=0.05))) 
x=grid[,1] 
y=grid[,2] 

Значения Z хранятся в другом векторе. Я попытался использовать функцию изображения, но не повезло. Например, если я пытаюсь

image(x,y,height.vals) 

где

height.vals=matrix(runif(dim(grid)[1]),nrow=dim(grid)[1],ncol=1) 

я получаю сообщение об ошибке, говорящее, что х и у должны увеличиваться.

Можно использовать функцию akima interp, но затем я получаю интерполированные данные.

ответ

0

Похоже, у вас есть очки на сетке 20 x 20. Таким образом, вы можете создать матрицу 20 x 20 и заполнить ее значениями от height.vals.

С немного тонкой настройки, вы можете превратить значения x и y в индексы матрицы и использовать эти показатели для назначения height.vals в соответствующих местах в матрице.

# Turn the x and y values into integers. 
# R doesn't take 0 as an index, so add 1 to the x values to get rid of the 0s 
inds <- cbind(x = as.integer(20*x + 1), y = as.integer(20*y)) 

# create the 20 x 20 matrix 
m <- matrix(nrow = 20, ncol = 20) 
# fill the matrix with height.vals based on the indices 
m[inds] <- height.vals 

Затем вы можете использовать m в качестве входных данных для функции как image, filled.contour и lattice::levelplot

image(m) 

enter image description here

+0

Спасибо, @Jota. Точно, что я так ищу! – FredrikAa

Смежные вопросы