Applying isosurface on a 3D array results in only one isosurface of color value 0.

9 views (last 30 days)
I have a 3D array "D" that has continuous values that range from 0 to 96.442 (of type double). I want to plot this array as a 3D heatmap for the values greater than zero using the approach of patch(isosurface(X,Y,Z,D>0,D)). Whenever I run that line though I only get a 3D object that has the same value (ie isosurface runs without errors but for my colors output [faces, verts, colors], all my vertices have the same colors value of 0). This indicates to me that isosurface might not be detecting isosurfaces. I tried rounding my values but still I get the same result. Any thoughts?

Answers (1)

Ruchika
Ruchika on 14 Aug 2023
Hi, as per my understanding, you want to visualize a 3D array "D" containing continuous values within the range of 0 to 96.442 using a 3D heatmap approach with the command `patch(isosurface(X,Y,Z,D>0,D))`, but despite successful execution, the resulting 3D object displays uniform colors and values, suggesting a possible issue with the detection of isosurfaces and rounding the values has not resolved the outcome.
Here are a few steps you can take to troubleshoot the issue:
  1. Check Data Range and Values: Double-check your data array D to ensure that it contains values greater than 0 where you expect them. It's possible that the values in D do not satisfy the condition for generating isosurfaces.
  2. Adjust the Threshold Value: Try adjusting the threshold value used in the condition D > 0 to a smaller value. This might help ensure that more regions of the data satisfy the condition and generate isosurfaces.
  3. Inspect the Data: Use MATLAB's built-in functions like min(D(:)) and max(D(:)) to check the minimum and maximum values in your data array D. This can help you determine if the data contains values above 0.
  4. Use Smaller Subsets of Data: To test whether the issue is with the data itself or with the isosurface function, consider using smaller subsets of your data to generate isosurfaces. This can help you isolate the problem.
  5. Use Known Data: If troubleshooting the issue with your data is challenging, consider using known test data that should generate isosurfaces, such as simple mathematical functions.
The following code will generate data that should result in visible isosurfaces:
% Create a 3D grid of coordinates
[X, Y, Z] = meshgrid(1:10, 1:10, 1:10);
% Generate data using a simple function (you can replace this with your own function)
D = X.^2 + Y.^2 + Z.^2;
% Threshold value to generate isosurfaces
threshold = 20; % Adjust this threshold if needed
% Plot the 3D heatmap with isosurfaces
figure;
p = patch(isosurface(X, Y, Z, D > threshold, D));
isonormals(X, Y, Z, D > threshold, p);
p.FaceColor = 'interp';
p.EdgeColor = 'none';
colormap(gca, parula);
colorbar;
grid on;
axis tight;
xlabel('X');
ylabel('Y');
zlabel('Z');
view(3);
title('3D Heatmap with Isosurfaces');
Please let me know if this solves your query.

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!