FaceAlpha of surf plot takes the first row and column twice
4 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hi all,
This problem has been bugging me for quite some time so I decided to post the question. When I'm trying to use face alpha on a surf plot to make some faces disappear, I found that the first row and column of the alphadata matrix are used for the first two rows. Example:
[X,Y] = meshgrid(1:5,1:5);
Z = ones(5,5);
A = zeros(5,5);
A(1,1) = 1;
surf(X,Y,Z,'FaceAlpha','flat','AlphaDataMapping','none','AlphaData',A)
I would expect this code to draw only the first face (1,1), but it draws faces (1,1), (2,1), (1,2) and (2,2). When I turn on index (2,2) of the alphadata it does show only one face, though shifted:
[X,Y] = meshgrid(1:5,1:5);
Z = ones(5,5);
A = zeros(5,5);
A(2,2) = 1;
surf(X,Y,Z,'FaceAlpha','flat','AlphaDataMapping','none','AlphaData',A)
Why can't I control the first two rows and columns separately? Is it a bug? The results of both codes are shown in the image below. Left is the first part and right the second:
Thanks in advance, Emiel
0 Commenti
Risposta accettata
Rob Comer
il 23 Mar 2014
This variation does what I think you're hoping for:
[X,Y] = meshgrid(1:5,1:5);
Z = ones(5,5);
C = ones(4,4);
A = zeros(4,4);
A(1,1) = 1;
surf(X,Y,Z,'CData',C,'AlphaData',A, ...
'FaceColor','texturemap','FaceAlpha','texturemap')
It sets the color and alpha data on each face instead of at each vertex (echoing Chad's concern), which goes along with the 'texturemap' settings.
Più risposte (1)
Chad Greene
il 21 Mar 2014
Interesting. My question is, why would it make sense to define alpha at vertices? By that I mean, the alphadata is defined for intersections of lines, not the squares between the intersections. A simple workaround is to change facealpha to interp by plotting with this line:
surf(X,Y,Z,'FaceAlpha','interp','AlphaDataMapping','none','AlphaData',A)
But that doesn't explain the odd placement of the alpha map using the flat method.
1 Commento
Emiel
il 21 Mar 2014
Thanks for your answer. With the surf plot I represent a 2D FEM mesh. The displacements are indeed defined at the vertices but I have some other property defined on and constant over each element (face), represented by the alpha value. Therefore I want the whole face have some alpha value and not interpolate between the vertices.. I get the idea that this is a bug, but lets hope it's not.
Vedere anche
Categorie
Scopri di più su Surface and Mesh 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!