координаты x y перевернуты с помощью rgl

Извините, если я упустил очевидное...

Я рисую трехмерную поверхность с помощью rgl. Мой код

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)

который дает

введите здесь описание изображения

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

Я объясню, как данные выглядят здесь и почему я чувствую необходимость изменить их порядок. с участием

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

Странно то, что независимо от того, использую ли я приведенную выше команду или нет, трехмерная карта поверхности выглядит точно так же, что заставляет меня задаться вопросом, действительно ли код использует набор данных «dem», созданный с помощью команды order, или он все еще использует исходный " dem1", которые были прочитаны из файла и расположены в неправильном порядке.

Я очень рад отправить данные по запросу или разместить их где-нибудь, чтобы их можно было увидеть, но я не могу скопировать их здесь, так как это 1250 строк x 1250 столбцов.

Заранее спасибо!


r rgl
person SnowFrog    schedule 24.08.2011    source источник
comment
Это не из-за того, как вы строите матрицу z, не так ли? R будет заполнять столбцы, а не строки. Посмотрите, работает ли z <- matrix(dem$V3, nrow=1250, ncol=1250, byrow = TRUE). Это единственная разница, которую я вижу между тем, что используется contourplot() и persp3d().   -  person Gavin Simpson    schedule 24.08.2011
comment
Да, это! Большое спасибо! Я просто потратил на это целый день. Наверное, я действительно упустил очевидное...   -  person SnowFrog    schedule 24.08.2011
comment
Под «да» я имел в виду «да», мне пришлось написать «z ‹- матрица (dem $ V3, nrow = 1250, ncol = 1250, byrow = TRUE)»…   -  person SnowFrog    schedule 24.08.2011
comment
Хорошо, я добавлю в качестве ответа, чтобы вы могли принять, и это можно считать решенным ;-) Рад, что это сработало.   -  person Gavin Simpson    schedule 24.08.2011


Ответы (1)


Проблема с созданием z, матрицы высот. R заполняет матрицы столбцами при создании матриц. Именно это заполнение колоннами и перестраивает высоты относительно друг друга. Это усугубляется тем, что матрица квадратная. Если бы матрица не была квадратной, отношения между x, y и z изменились бы более заметно, а не просто перевернулись.

Решение состоит в том, чтобы R заполнил матрицу по строкам, например. определить z с помощью:

z <- matrix(dem$V3, nrow=1250, ncol=1250, byrow = TRUE)
person Gavin Simpson    schedule 24.08.2011