Как получить вертикальные линии на 3D-графике рассеяния в Matlab? - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть три матрицы x, y, z, которые построены с помощью scatter3 в matlab.Однако мне также нужны вертикальные линии, падающие из каждой точки на графике для лучшей визуализации.

Используя matlab 2017a, реализован трехмерный график рассеяния в matlab.

enter code here
clc;
figure
x = [0,0,0,0,0,10,10,10,10,10];
y = [0,10,20,30,40,-10,0,10,20,30];
z = [46,52,51,59,53,85,56,87,86,88];
scatter3(x, y, z, 30, 'filled')

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Вы также можете использовать встроенную функцию stem, которая делает именно это.

Небольшая хитрость в том, что вы не можете передать координаты z в сокращенной форме.stem(x,y,z), но графический объект по-прежнему принимает z данные, вам просто нужно отправить их в качестве дополнительного параметра.

Приятной частью является то, что вам не нужен цикл; -)

x = [0,0,0,0,0,10,10,10,10,10];
y = [0,10,20,30,40,-10,0,10,20,30];
z = [46,52,51,59,53,85,56,87,86,88];

hp = stem(x,y,'filled','ZData',z) ;

Или, как замечательно отмечено Gnovice , еще проще использовать функцию stem3, которая принимает данные z напрямую:

hp = stem3(x,y,z,'filled') ;

Оба примера выше приведут к:

enter image description here

0 голосов
/ 16 февраля 2019

Как @ SardarUsama указал, plot3 должно сработать.Код мог бы быть более компактным, но оставил его как есть для ясности.

Vertical lines on 3d scatter plot

% MATLAB R2017a   
x = [0,0,0,0,0,10,10,10,10,10];
y = [0,10,20,30,40,-10,0,10,20,30];
z = [46,52,51,59,53,85,56,87,86,88];

figure
scatter3(x, y, z, 30, 'filled')  % scatter plot (3D)
zRng = zlim;
hold on
for k = 1:length(x)
    xL = [x(k) x(k)];
    yL = [y(k) y(k)];
    zL = [zRng(1) z(k)];
    plot3(xL,yL,zL,'r-')         % plot vertical line (3D)
end
...