Effacer les filtres
Effacer les filtres

How to set zero value boxes transparent in 3D plots?

5 vues (au cours des 30 derniers jours)
Kelvin
Kelvin le 17 Mai 2016
I used a function called ind2patch to make a big 3D block which contains a number of smaller blocks in 3 dimensions. Each small block has a value which the magnitude is represented by a color.One example is shown below: https://www.dropbox.com/s/jlyxxgo1urwipom/DisDen.png?dl=0
However, most of the boxes have very low or zero value and I don't need to show them. How can I make these boxes transparent? I just want to show the boxes with non-zero value.
For the above 3D plot I use a matrix M to store the value of each box (i,j,k) and use the following algorithm to plot:
indPatch=1:numel(M);
[F,V,C]=ind2patch(indPatch,M,'v'); %Call the function ind2patch in order to plot 3D cube with color
xlabel('y','fontsize',20);ylabel('x','fontsize',20); zlabel('z','fontsize',20); hold on;
set(get(gca,'xlabel'),'Position',[5 -50 30]); %set position of axis label
set(get(gca,'ylabel'),'Position',[5 50 -15]);
set(get(gca,'zlabel'),'Position',[64 190 -60]);
patch('Faces',F,'Vertices',V,'FaceColor','flat','CData',C,'EdgeColor','k','FaceAlpha',0.5);
axis equal; view(3); axis tight; axis vis3d; grid off;

Réponses (1)

Walter Roberson
Walter Roberson le 17 Mai 2016
Do not use the constant 0.5 for FaceAlpha. Instead use FaceAlpha 'flat' and set FaceVertexAlphaData to the appropriate per-face alpha data. That would probably look something like
double(C > SomeCutoffValue)
as that would give alpha 0 for all values below the cutoff

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by