MATLAB: сделать матрицу из двух переменных и построить контур из третьей переменной - PullRequest
1 голос
/ 25 мая 2011

У меня есть 3 переменные (x, y, z) каждая в векторе 192x1.Все данные случайные и иногда имеют пропущенные значения (NaN).Я хотел бы построить переменную c против двух других переменных x и y как контурный график (x по оси x, y по оси y и z, составляющиеЛинии контура).

Моя самая большая проблема состоит в составлении матрицы 192x192 для x и y, поскольку x и y состоят из случайных данных.Я пытался использовать GRIDDATA, Delaunay и TriScatteredInterp, но они не работали, потому что в моих данных есть NaN.Кто-нибудь знает, что я могу сделать?Если бы я мог вернуть матрицу x против y из диаграммы рассеяния x и y, тогда моя проблема была бы решена.

Пример кода

x=rand(192,1);
y=rand(192,1);
z=rand(192,1);

[X,Y]=meshgrid(x,y);
contour(X,Y,z);

???Ошибка при использовании ==> контура при 74 Z должна быть размером 2x2 или больше.

Ответы [ 2 ]

1 голос
/ 28 мая 2011

Что вы собираетесь делать с NaNs?Содержат ли они дополнительную информацию для рисования контурного графика?Разве вы не можете просто удалить их?

idx = any(isnan([x y z]),2);
x(idx)=[];
y(idx)=[];
z(idx)=[];

Тогда вы можете применить решение от к этому вопросу .Пропущенные данные все равно будут интерпретированы.

0 голосов
/ 25 мая 2011

Из-за привлекательности контурных графиков проблема заключается в размере матрицы z. Если вы отлаживаете свой код, вы видите, что после вызова meshgrid X и Y становятся размером 192 x 192. Просто измените следующую строку, и она будет работать! Дайте мне знать, если проблема была решена;)

z=rand(192,192);
...