x y用rgl颠倒坐标

时间:2011-08-24 15:40:34

标签: r rgl

道歉,如果我错过了明显的......

我正在用rgl绘制一个3d表面。我的代码是

library(rgl)
dem1 = read.table(file="file.txt",skip=5,header=F,na.strings="0.")
dem = dem1[order(dem1$V1,dem1$V2),] 
z = matrix(dem$V3,nrow=1250,ncol=1250)
is.na(z) = (z < 200)

#create x y dimensions
x=4*(1:nrow(z))
y=4*(1:ncol(z))

open3d()
bg3d("white")
persp3d(x,y,z)

给出了这个地图(添加了颜色以便更好地查看功能,即使我没有在上面放置代码)

enter image description here

问题在于,无论我对这张地图做了什么,它都是颠倒的,即x应该是y,而当前y从西(0)到东(5000),但它应该是相反的,因此提升的特征应该实际上是左下角而不是右下角。

我使用与此脚本相同的文件绘制了一个非常简单的等高线图

dem=read.table("file.txt",header=F,skip=5,na.strings="0.")
library(lattice)
contourplot(dem$V3 ~ dem$V1+dem$V2)

给出了

enter image description here

它获得右下角和左下角最高的区域,正是它应该的位置,因此数据没有问题。

我解释了数据的外观here以及我觉得需要用

重新排序的原因
dem = dem1[order(dem1$V1,dem1$V2),] 

奇怪的是我是否使用上面的命令,3D表面图看起来完全一样,这让我想知道代码是否真的使用了使用order命令创建的“dem”数据集,或者是否它仍然使用从文件中读取的原始“dem1”数据,并且顺序错误。

我很高兴根据请求发送数据或将其放在可以看到的地方,但我不能将其复制到此处,因为它是1250行x1250列。

提前致谢!

1 个答案:

答案 0 :(得分:2)

问题在于创建了z,即高程矩阵。 R在创建矩阵时按列填充矩阵。正是这种填充柱将相对于彼此重新布置。矩阵是正方形的事实加剧了这种情况。如果矩阵不是正方形,xyz之间的关系会发生更明显的变化,而不是仅仅被翻转。

解决方案是让R按行填充矩阵,例如使用:

定义z
z <- matrix(dem$V3, nrow=1250, ncol=1250, byrow = TRUE)