【发布时间】:2016-05-30 20:02:52
【问题描述】:
我有一个包含位置 (X,Y,elevation) 的矩阵。我将一列添加到我称之为“索引”的矩阵中。我从矩阵创建了一个 X 和一个 Y 向量。它们都包括索引列。然后我对刚刚创建的 X 和 Y 向量进行升序排序。然后我构造一个包含高程的 Z 矩阵,并使用索引将其与位置相关联。然后我尝试使用命令 contour (我想绘制等高线图)并且我得到错误说 X 和 Y 应该是升序......我刚刚做了!!!我做错了什么?
noeud<-read.table("position.out")
Matrice_Noeud<-matrix(ncol = ncol(noeud), nrow=nrow(noeud))
for (i in 1:nrow(noeud)) {
for (j in 1:ncol(noeud)) {
Matrice_Noeud[i,j]<-noeud[i,j]
}
}
Matrice_Noeud <- cbind(Matrice_Noeud, c(seq(1,nrow(noeud),1)))
x<-data.frame(x=Matrice_Noeud[,1],Index=Matrice_Noeud[,4])
y<-data.frame(y=Matrice_Noeud[,2],Index=Matrice_Noeud[,4])
X<-x[order(x$x),]
Y<-y[order(y$y),]
Z<-matrix(NA, ncol=nrow(noeud),nrow=nrow(noeud))
for (x_i in 1:nrow(noeud)) {
for (y_i in 1:nrow(noeud)) {
if (Y$Index[y_i]==X$Index[x_i]) {
niveau<-which(Matrice_Noeud[,4]==Y$Index[y_i])
Z[x_i,y_i]<-Matrice_Noeud[niveau,3]
}
}
}
Xx<-array(X[,1])
Yy<-array(Y[,1])
Zz<-data.frame(Z)
contour(Xx,Yy,Zz)
【问题讨论】:
-
length( unique(noeud[,1]) ) * length( unique(noeud[,2]) )=nrow( noeud )??如果不是,contour() 无法处理数据。 -
不,他们不是。长度(唯一(noeud[,1])= 19;长度(唯一(noeud[,2])= 12 nrow(noeud)= 121
-
我不太明白为什么他们需要平等?我以这样的方式构造了矩阵 Z,它相当于一个带有 X 和 Y 的网格,并且 Z 的相应值被放置与它们的初始位置相关......我很困惑。你愿意跟我解释一下吗? (对不起,如果这个问题有点愚蠢,但我现在很困惑)。
-
plot(0,0, type="n",ann=F,xlim=c(0,7), ylim=c(0,6), axes=F, xaxs="i", yaxs="i") abline(v=0:7, col="#00000040"); abline(h=0:6, col="#00000040") points(0:7, rep(-0.2, 8), col="red", pch=19, xpd=T, cex=1.1) points(rep(-0.2, 7), 0:6, col="blue", pch=19, xpd=T, cex=1.1) points(expand.grid(0:7, 0:6), col="green3", pch=19, xpd=T)contour() 需要 X(红色点)、Y(蓝色)和几乎所有网格点的 Z 值(绿色)。 -
例如,link;有 228 个 Z(上),有 121 个 Z 和 107 个 NA(下),需要插值。