Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

How do you create a surf plot in cylindrical coordinates?

Asked by Jeremy Pearson on 17 Nov 2012

In general, the syntax for a surf plot is surf(X,Y,Z). I have u = F(r,z). I'd like to do surface plots of u for multiple cross sections at z = h1, h2, h3, etc. Is there a simple way to create a surf plot in cylindrical coordinates, i.e., something that would be analagous to the syntax: surf(r,phi,u) where u = u(r,h1)?

0 Comments

Jeremy Pearson

Products

No products are associated with this question.

3 Answers

Answer by Jonathan Epperl on 19 Nov 2012
Accepted answer

Or even easier, remember that you're not forced to put just one variable X in the first argument of surf, all you need is a parametrization. So in your case, assume you have vectors r and phi. Then make them into a grid, obtain a matrix with z-values using your function F and just plot:

[R PHI] = meshgrid(r,phi);
Z = F(R,PHI); % which assumes your function is vectorized
surf(R.*cos(PHI), R.*sin(PHI), Z);

1 Comment

Jeremy Pearson on 19 Nov 2012

Jonathan,

Works great! I had to modify the code a little bit to get it to work since F is a function of r and z and not r and phi, but your tip put me in the right direction. This is the code I entered:

>> [r,theta] = meshgrid(linspace(0,0.7,30),linspace(0,2*pi,30));

>> flux = F(r,meshgrid(linspace(0.4,0.4,30))); % new meshgrid defines z

>> surf(r.*cos(theta),r.*sin(theta),flux);

I may have not had to create and extra meshgrid and define everything in linspace but I just fiddled with it until it worked.

Thanks for all your help!

Jeremy

Jonathan Epperl
Answer by Matt J on 17 Nov 2012

Use TriScatteredInterp to interpolate your data onto a cartesian grid. Then plot using SURF as usual.

0 Comments

Matt J
Answer by Teja Muppirala on 19 Nov 2012

You can use POL2CART to convert the data from r/theta to x/y and then call SURF.

[R,TH] = ndgrid(0:0.1:5,linspace(0,2*pi,41));
F = @(r,th) sin(th).*sinc(1+r);
Z = F(R,TH);
[X,Y] = pol2cart(TH,R);
surf(X,Y,Z);

0 Comments

Teja Muppirala

Contact us