道歉,如果我错过了明显的......
我正在用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)
给出了这个地图(添加了颜色以便更好地查看功能,即使我没有在上面放置代码)
问题在于,无论我对这张地图做了什么,它都是颠倒的,即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)
给出了
它获得右下角和左下角最高的区域,正是它应该的位置,因此数据没有问题。
我解释了数据的外观here以及我觉得需要用
重新排序的原因dem = dem1[order(dem1$V1,dem1$V2),]
奇怪的是我是否使用上面的命令,3D表面图看起来完全一样,这让我想知道代码是否真的使用了使用order
命令创建的“dem”数据集,或者是否它仍然使用从文件中读取的原始“dem1”数据,并且顺序错误。
我很高兴根据请求发送数据或将其放在可以看到的地方,但我不能将其复制到此处,因为它是1250行x1250列。
提前致谢!
答案 0 :(得分:2)
问题在于创建了z
,即高程矩阵。 R在创建矩阵时按列填充矩阵。正是这种填充柱将相对于彼此重新布置。矩阵是正方形的事实加剧了这种情况。如果矩阵不是正方形,x
,y
和z
之间的关系会发生更明显的变化,而不是仅仅被翻转。
解决方案是让R按行填充矩阵,例如使用:
定义z
z <- matrix(dem$V3, nrow=1250, ncol=1250, byrow = TRUE)