generate a 3d scatter plot with z-support lines / pin plot / needle plot ...
3 ビュー (過去 30 日間)
古いコメントを表示
I'd like to plot scattered 3d data. To enhance readability, I want to add support lines in z-direction ("needles") to the data points with matching colors, see the image below.

Is there a specific name for such a plot?
To generate the chart, I used the code below with a for loop. I wonder if you have ideas how to simplify the code.
X = rand(20, 3);
f = figure;
hsc = scatter3(X(:,1),X(:,2),X(:,3), 20, X(:,3));
cmap = colormap('cool');
axis tight
xlabel("x"), ylabel("y"), zlabel("z")
title('needle plot')
box on
hold on
% draw support lines ("needles")
zlo = zlim*[1;0];
c_inter_fun = @(x) ...
interp1(linspace(zlo, zlim*[0;1], length(cmap)).' , cmap, x);
for k = 1:numel(hsc.XData)
plot3(hsc.XData(k)*[1 1], ...
hsc.YData(k)*[1 1], ...
[zlo, hsc.ZData(k)], ...
Color=c_inter_fun(hsc.ZData(k)));
end
0 件のコメント
採用された回答
Star Strider
2024 年 12 月 10 日
You will probably still have to use a loop of you want the individual stems and markers to be different colours, since the stem plots do not offer those options.
X = rand(20, 3);
f = figure;
hsc = stem3(X(:,1),X(:,2),X(:,3));
cmap = colormap('cool');
axis tight
xlabel("x"), ylabel("y"), zlabel("z")
title('needle plot')
box on
cm = cool(size(X,1));
f = figure;
hold on
for k = 1:size(X,1)
hsc = stem3(X(k,1),X(k,2),X(k,3), 'filled', Color=cm(k,:));
end
hold off
cmap = colormap('cool');
axis tight
xlabel("x"), ylabel("y"), zlabel("z")
title('needle plot')
box on
grid on
view(-27,30)
% hold on
% draw support lines ("needles")
% zlo = zlim*[1;0];
% c_inter_fun = @(x) ...
% interp1(linspace(zlo, zlim*[0;1], length(cmap)).' , cmap, x);
% for k = 1:numel(hsc.XData)
% plot3(hsc.XData(k)*[1 1], ...
% hsc.YData(k)*[1 1], ...
% [zlo, hsc.ZData(k)], ...
% Color=c_inter_fun(hsc.ZData(k)));
% end
.
10 件のコメント
その他の回答 (1 件)
Jacob Mathew
2024 年 12 月 10 日
Hey Andres,
You can use stem3 to achieve the effect you want. Here is an example:
X = rand(20, 3);
figure;
hold on;
% Create stem plot (needles)
stem3(X(:,1), X(:,2), X(:,3), 'Color', 'k');
% Customize plot
colormap('cool');
axis tight;
xlabel('x');
ylabel('y');
zlabel('z');
title('Needle Plot');
box on;
view(45,45); % To view the plot from a angle since plot is not interactive below
You can refer to the documentation of stem3 below:
参考
カテゴリ
Help Center および File Exchange で Data Distribution Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!