Есть ли способ показать 2D-проекцию на графике рассеяния трехмерных облаков точек с помощью scatter3? - PullRequest
0 голосов
/ 10 мая 2019

Я использую функцию scatter3 для отображения результатов трехмерного облака точек. А теперь я хочу построить 2D-проекцию точек рассеяния, например, на плоскость Y-Z.

Идеальным результатом должно быть облако рассеянных точек в 3D-матрице, а также 2D-проекция на плоскость Y-Z. Как я могу это сделать?

Ответы [ 2 ]

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

Вот скрипт, который делает что-то вроде того, что вы ищете

% generate random data
n = 64;
x = zeros(n,3);
for k = 1:3
    x(:,k) = randi(4) * randn(n,1) + randi(8);
end
x(:,4) = randi([8,16],n,1);
x(:,5) = randi(256,n,1);

% generate scatter plot
h = scatter3(x(:,1),x(:,2),x(:,3),x(:,4),x(:,5));
h.MarkerFaceColor = 'flat';

% get axes handle
hAx = gca;
hAx.XLabel.String = 'x';
hAx.YLabel.String = 'y';
hAx.ZLabel.String = 'z';

% get axes slices
xSlice = hAx.XLim(2);
ySlice = hAx.YLim(2);
zSlice = hAx.ZLim(1);

% add projected markers
hAx.NextPlot = 'add';
hAx.Box = 'on';
% xy plane
h(2) = scatter3(x(:,1),x(:,2),zSlice*ones(n,1),x(:,4),x(:,5));
% zy plane
h(2) = scatter3(xSlice*ones(n,1),x(:,2),x(:,3),x(:,4),x(:,5));
% xz plane
h(3) = scatter3(x(:,1),ySlice*ones(n,1),x(:,3),x(:,4),x(:,5));
view(-45,30)
0 голосов
/ 10 мая 2019

Если вы просто установите все элементы X, Y или Z в одно значение, это будет проецировать все точки на эту плоскость.Я проецировал на плоскость X = 1, потому что она находится позади графика и выглядит лучше.

Points = rand(50,3);
scatter3(Points(:,1),Points(:,2),Points(:,3),'.');
hold on
scatter3(ones(size(Points(:,1))),Points(:,2),Points(:,3),'+')
hold off
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...