How to create 3-D contour plots with filled surfaces?

34 vues (au cours des 30 derniers jours)
Guido
Guido le 7 Oct 2014
Réponse apportée : Marina le 31 Août 2022
Hello,
is it possible to create 3-D isoline plots in Matlab as they are shown in the Application Note 733 (A Filter Primer) from Maxim?
Here are some links to the plots I’m talking about:
My problem is that I'm not able to fill the surface between the 3-D isolines. The best result I'm able to get is a plot like this:
[MATLAB]
% Transfer function
H_tf = tf(1,[2 1],'variable','p','TimeUnit','seconds');
[H_tf_Enumerator, H_tf_Denominator] = tfdata(H_tf);
% Grid
omega_Min = -1.0;
omega_Max = 1.5;
sigma_Min = -2.0;
sigma_Max = -0;
sigma_GridVector = linspace(sigma_Min,sigma_Max,40);
omega_GridVector = linspace(omega_Min,omega_Max,40);
[sigma_GridMatrix, omega_GridMatrix] = meshgrid(sigma_GridVector,omega_GridVector);
p_Grid = complex(sigma_GridMatrix,omega_GridMatrix);
% Transfer function values
Response = polyval(H_tf_Enumerator{:}, p_Grid)./polyval(H_tf_Denominator{:}, p_Grid);
Response_dB = 20*log10(abs(Response));
% 3-D plot
hfigure = figure;
view(axes('Parent',hfigure),[120 40]);
grid on;
hold on;
contour3(sigma_GridVector,omega_GridVector,Response_dB,10);
surface(sigma_GridVector,omega_GridVector,Response_dB,'EdgeColor',[0.6 0.6 0.6],'FaceColor','w');
[/MATLAB]
Is there a way to fill the regions between the isolines with a colour? There should be a function like "contour3f".
Best regards Guido

Réponses (3)

Star Strider
Star Strider le 7 Oct 2014
Comment-out your contour3 call and change your surface call to surf with a few changes:
% contour3(sigma_GridVector,omega_GridVector,Response_dB,10);
surf(sigma_GridVector,omega_GridVector,Response_dB)
Is that what you want it to look like?
  1 commentaire
Star Strider
Star Strider le 7 Oct 2014
Add these lines after the surf call:
shading interp
colormap(jet(8))

Connectez-vous pour commenter.


Guido
Guido le 7 Oct 2014
Hello,
thank you for your reply. I get the following plot , when I perform the changes as described by you.
The difference to the plot I'd like to have is, that the color should change not at the border of the squares. The color should change at horizontal planes/isolines. For example: All points with z values between -10 and -5 should be blue, all points with z values between -5 and 0 should be green, and so on...
Best regards
Guido

Marina
Marina le 31 Août 2022
I had the same problem and solved it like this:
hold on
contour3(sigma_GridVector,omega_GridVector,Response_dB,10);
surf(sigma_GridVector,omega_GridVector,Response_dB,'facealpha',0)
Face alpha makes the surf plot transparent.
Marina

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by