Is there any way to speed this up?
9 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I have a large (100x100x100) dataset of very small probabilites for electron locations in the hydrogen atom. I am attempting to create a 3-D heatmap of sorts, which I have done, using isosurface and layering many of them ontop of eachother using this code.
figure()
Psi = importdata("psi.mat");
n = 4;
l = 2;
m = 0;
isovalues1 = 1*10^(-(n+2)):1*10^(-(n+2)):1*10^(-n);
for i=1:length(isovalues1)
isosurface(Psi.^2,isovalues1(i))
alpha(isovalues1(i)*10^(n-2));
end
axis equal
axis vis3d
ax=gca; ax.SortMethod='childorder';
colorbar
title(['N = ',num2str(n),', L = ',num2str(l),', M = ',num2str(m)])
This works. But as you can imagine, making 100 isosurfaces at a time can be quite slow. I was wondering if there was any way to speed up what I have or perhaps another way to make a 3-D heatmap.
0 Commenti
Risposta accettata
Cris LaPierre
il 23 Mag 2024
Modificato: Cris LaPierre
il 24 Mag 2024
My question is if it has to be done with isosurfaces. Here's an approach that uses scatter3. You can adjust the marker size to change how the data is displayed. It does look different, but it seems all the important info is still there.
load("psi.mat",'Psi');
n = 4;
l = 2;
m = 0;
% create (x,y,z) coordinates
[X,Y,Z] = meshgrid(1:size(Psi,2),1:size(Psi,1),1:size(Psi,3));
isovalues1 = 1*10^(-(n+2)):1*10^(-(n+2)):1*10^(-n);
% discretize the data by isovalues
[bin,edges] = discretize(Psi.^2,isovalues1);
% Plot data
idx = bin(:)>0;
scatter3(X(idx),Y(idx),Z(idx),1,isovalues1(bin(idx)),'filled')
alpha(isovalues1(bin(idx)).*10^(n-2))
axis equal
axis vis3d
colorbar('TickLabels',isovalues1)
title(['N = ',num2str(n),', L = ',num2str(l),', M = ',num2str(m)])
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Data Distribution Plots in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

