2014-09-01 2 views
1

Учитывая следующий код, как сделать значения Inf невидимыми в области разброса без цветовых манипуляций?Простой способ фильтрации Infs в plot3 plot

J = rand(20, 40, 5); 
J(J>.6 & J<.4) = Inf; 

% Plot a scatter matrix 
shape = size(J); 
[x,y,z] = meshgrid(1:shape(1), 1:shape(2), 1:shape(3)); 
scatter3(x(:), y(:), z(:), 4, J(:), 'fill'); 
+1

@divakar ups, слишком простой. Поэтому 'NaN' никогда не замышляются. Хорошо знать. – embert

ответ

2

Данные, которые имеют NaN значения становятся невидимыми при печати с MATLAB, которые можно эксплуатировать в вашем случае. Так как вы хотите сделать значения Infinte невидимыми, вы можете преобразовать их все в NaNs, а затем построить их. Здесь вы можете воспользоваться помощью логической индексации, чтобы индексировать позиции позиций Inf. Таким образом, код будет:

J(isinf(J))=NaN 

%// ... Plot J 
+0

Знаете ли вы, как добиться того же результата при использовании рендеринга OpenGL? – embert

+0

@embert Извините, не знаю об этих темах. – Divakar

+1

Только что заметил, что это можно легко выполнить, отфильтровывая вершины перед построением через 'x = x (~ isinf (J)), y = y (~ isinf (J)), z = ..' после преобразования' x, y, z' и 'J' для одиночных векторов столбцов (' x = x (:) '). – embert

0

Одним из способов может быть изменение значений, превышающих определенный порог, для NaN (или любого другого номера). Я считаю, что значения NaN не будут отображаться в вашем разбросе. Вы можете сделать это с помощью того же кода, который вы уже используете.

J(J>10^6) = NaN;