Applying Colormaps to Scatter3 Plots
28 ビュー (過去 30 日間)
古いコメントを表示
I'm trying to plot using scatter3, along with colormaps to understand correlations in my data. Currently, this is what I've developed

At first glance, this might look ok, but if you take a closer look (especially as time increases,) you can see that the control action data points don't follow the colorbar colors as you would expect it to. To help, here's the code I wrote to make the plot.
% Here, variable{xAxisChoice} and its similiar calls are 500 x 3001
% matrices.
c = parula(height(variable{zAxisChoice}));
figure()
hold on; grid on; grid minor; box on;
scatter3(variable{xAxisChoice}, variable{yAxisChoice}, variable{zAxisChoice}, 0.75, c)
xlabel(name{xAxisChoice});
ylabel(name{yAxisChoice});
zlabel(name{zAxisChoice})
title(['Scenario ' num2str(scenarioChoice)])
cb = colorbar('colormap', c);
clim([min(variable{4}, [], 'all'), max(variable{4}, [], 'all')])
ylabel(cb, 'Control Action, u [1/m]','FontSize', 12);
I'd be willing to switch to surf or scatteredInterpolant if that makes it easier to represent. The essential points are that each point can be seen, and that the colormap can be applied.
4 件のコメント
Walter Roberson
2024 年 3 月 6 日
編集済み: Walter Roberson
2024 年 3 月 6 日
variable = {rand(500,3001),rand(500,3001),rand(500,3001)};
xAxisChoice = 1;
yAxisChoice = 2;
zAxisChoice = 3;
c = variable{zAxisChoice}(:);
figure()
hold on; grid on; grid minor; box on;
scatter3(variable{xAxisChoice}(:), variable{yAxisChoice}(:), variable{zAxisChoice}(:), 0.75, c)
view(3)
colormap(parula)
採用された回答
Voss
2024 年 3 月 6 日
"Do you have any idea how I could correlate the color of the point to the z-axis?"
If that's what you want to do, the easy way is to set the figure or axes colormap, and use the Z-variable as the color input to scatter3:
variable = {25+15*rand(500,3001),300*rand(500,3001),-2.5e-4*rand(500,3001)};
xAxisChoice = 1;
yAxisChoice = 2;
zAxisChoice = 3;
name = {'Density \rho [cars/km]','Time t[s]','Control Action, u [1/m]'};
c = parula(height(variable{zAxisChoice}));
figure('Colormap',c)
hold on; grid on; grid minor; box on;
scatter3(variable{xAxisChoice}(:), variable{yAxisChoice}(:), variable{zAxisChoice}(:), 0.75, variable{zAxisChoice}(:))
xlabel(name{xAxisChoice});
ylabel(name{yAxisChoice});
zlabel(name{zAxisChoice});
cb = colorbar();
clim([min(variable{zAxisChoice}, [], 'all'), max(variable{zAxisChoice}, [], 'all')])
ylabel(cb, name{zAxisChoice},'FontSize', 12);
view(3)
3 件のコメント
Voss
2024 年 3 月 7 日
You're welcome!
In case variable{xAxisChoice} et al are not all the same size, I would go by the smallest one and truncate the others for plotting. Something like this:
[mx,nx] = size(variable{xAxisChoice});
[my,ny] = size(variable{yAxisChoice});
[mz,nz] = size(variable{zAxisChoice});
m = min([mx,my,mz]);
n = min([nx,ny,nz]);
X = variable{xAxisChoice}(1:m,1:n);
Y = variable{yAxisChoice}(1:m,1:n);
Z = variable{zAxisChoice}(1:m,1:n);
scatter3(X(:), Y(:), Z(:), 0.75, Z(:))
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Color and Styling についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




