2014-09-11 2 views
3

Я хочу визуализировать 4 вектора рассеянных данных с поверхностным графиком. 3 векторами должны быть координаты. Кроме того, 4-й вектор должен представлять собой цвет поверхности. Мой первый подход для построения этих данных (хк, ук, гк, ск), используяУлучшение визуализации поверхности точек рассеяния

scatHand = scatter3(xk,yk,zk,'*');  
set(scatHand, 'CData', ck); 
caxis([min(ck), max(ck)]) 

В результате я получаю разбросанные точки разного цвета. Поскольку эти точки лежат на поверхности полушария, можно получить цветные грани вместо точек. Я заменить разбросанные точки на поверхность с помощью GridData к первому построить аппроксимацию

xk2=sort(unique(xk)); 
yk2=sort(unique(yk)); 
[xxk, yyk]=meshgrid(xk2, yk2); 
zzk=griddata(xk,yk,zk,xxk,yyk,'cubic'); 
cck=griddata(xk,yk,clr,xxk,yyk,'cubic');  
surf(xxk,yyk,zzk,cck); 
shading flat; 

Это уже почти то, что я хочу, за исключением того, что в нижней части полушария неровная. Конечно, если я увеличиваю номера точек интерполяции, он станет лучше, но обработка графика будет медленной. Поэтому я задаюсь вопросом, есть ли простой способ заставить функцию интерполяции сделать четкий разрыв. Кроме того, кажется, что оборванная граница связана с тем, что значение zzk получает «NaN» за пределами круга, которое полушарие разделяет с плоскостью z = 0. Hemisphere surface built out of scattered data

Красные точки в верхней части - это первые несколько записей исходных рассеянных данных.

ответ

2

Вы можете установить опцию ZLim, чтобы разрезать построенные значения в определенном диапазоне.

set(gca, 'Zlim', [min_value max_value]) 

enter image description here

Смежные вопросы