2011-08-24 5 views
3

Excuses si je manque l'évidence ...x y coordonnées à l'envers avec

Je trace une surface 3d avec rgl. Mon code est

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) 

qui donne cette carte (la couleur a été ajouté à voir les caractéristiques mieux, même si je ne l'ai pas mis le code au-dessus)

enter image description here

Le problème est que quoi que je fasse à cette carte, elle est à l'envers, ie x devrait être y et ce qui est actuellement y va de l'ouest (0) à l'est (5000) mais cela devrait être le contraire. en bas à droite.

Je tracé une carte de contour très simple en utilisant le même fichier avec ce script

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

qui donne

enter image description here

et qui obtient les axes de droite et la région la plus élevée dans le fond gauche, exactement où il devrait être, donc il n'y a pas de problème avec les données.

expliquer comment les données semble here et pourquoi je ressens le besoin de modifier l'ordre avec

dem = dem1[order(dem1$V1,dem1$V2),] 

La chose étrange est de savoir si j'utilise la commande ci-dessus ou non la carte de surface 3D ressemble exactement la même chose, qui Je me demande si le code utilise réellement le jeu de données "dem" créé avec la commande order ou s'il utilise toujours les données originales "dem1" qu'il a lues dans le fichier et qui sont dans le mauvais ordre.

Je suis très heureux d'envoyer les données sur demande ou de les mettre quelque part on peut le voir mais je ne peux pas le copier ici car il s'agit de 1250 lignes x1250 colonnes.

Merci d'avance!

+1

Ceci n'est pas dû à la façon dont vous construisez la matrice 'z' est-ce? R remplira par des colonnes et non par des lignes. Voir si 'z <- matrice (dem $ V3, nrow = 1250, ncol = 1250, byrow = VRAI)' fonctionne. C'est la seule différence que je peux voir entre ce qui est utilisé par 'contourplot()' et 'persp3d()' –

+0

Oui c'est! Merci beaucoup! Je viens de passer une journée entière à ce sujet. Je suppose que je manquais en effet l'évidence ... – SnowFrog

+0

Par oui, je voulais dire oui, je devais écrire 'z <- matrice (dem $ V3, nrow = 1250, ncol = 1250, byrow = TRUE)' ... – SnowFrog

Répondre

2

Le problème est avec la création de z, la matrice des élévations. R remplit les matrices par colonnes lors de la création de matrices. C'est ce remplissage par colonnes qui réarrange les élévations les unes par rapport aux autres. Ceci est aggravé par le fait que la matrice est carrée. Si la matrice n'était pas carrée, la relation entre x, y et z aurait changé plus nettement, au lieu de simplement être retournée.

La solution consiste à faire remplir R la matrice par des rangées, par ex. définir z en utilisant:

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