График рассеяния 3D с данными 4D

Мне нужно построить трехмерную фигуру с каждой точкой данных, окрашенной значением 4-й переменной, используя цветовую карту. Допустим, у меня есть 4 переменных X, Y, Z и W, где W = f (X, Y, Z). Мне нужен трехмерный график с тремя осями X, Y и Z. Оператор scatter3(X,Y,Z,'filled','b') дает мне график рассеяния в 3D, но я хочу включить значение Z в график, представив точки в качестве дополнительного параметра (либо с разными областями: большие круги для точек данных с высоким значением Z и маленькие кружки для точки данных с низким значением Z или путем нанесения точек данных разными цветами с использованием цветовой карты). Однако я новичок в MATLAB и действительно не знаю, как действовать. Любая помощь будет принята с благодарностью.

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


person BajajG    schedule 12.09.2014    source источник
comment
в вашем заявлении scatter3(X,Y,Z,'filled','b') 'b' обозначают синий цвет. Поскольку вы указываете только один цвет, он применяется ко всем точкам. Если вы используете scatter3(X,Y,Z,'filled',W), маркеры должны иметь другой цвет (относительно вашей 4-й оси W). Также обратите внимание, что вы можете заменить параметр 'filled' вектором числового значения (той же длины, что и другие), который будет контролировать размер каждого маркера.   -  person Hoki    schedule 13.09.2014


Ответы (2)


Поэтому просто используйте z для вектора размера (4-й вход), а также для вектора цвета (5-й вход):

z = 10*(1:pi/50:10*pi);
y = z.*sin(z/10);
x = z.*cos(z/10);

figure(1)
scatter3(x,y,z,z,z)

view(45,10)
colorbar

Вектор размера должен быть больше 0, поэтому вам может потребоваться соответствующая настройка z.

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

person thewaywewalk    schedule 12.09.2014
comment
Жаль, 30 секунд и у меня нет изображения;) - person Thomas; 13.09.2014
comment
Могу ли я раскрасить поверхность на основе категорий в данных. Например, stackoverflow.com/questions/38981257/ - person Rudresh Ajgaonkar; 16.08.2016
comment
Я не совсем понимаю ваш вопрос. Пожалуйста, опубликуйте новый с более подробной информацией. - person thewaywewalk; 16.08.2016

Вы уже почти у цели ... просто используйте

scatter3(X,Y,Z,s,W);

где s - размер точки (скаляр, например, 3), а W - вектор с вашими значениями W. Вы также можете захотеть выпустить

set(gcf, 'Renderer','OpenGL');

где gcf получает текущую цифру, которую вы строите, чтобы значительно повысить скорость отклика при разбросе большого количества данных.

person Thomas    schedule 12.09.2014