The code below works perfectly. I think this should be included as an
mplot3d codex. I'll look into what's required to submit a new example
to the documentation.
Thanks Armin!
···
Jeff Klukas, Research Assistant, Physics
University of Wisconsin -- Madison
jeff.klukas@...3030... | jeffyklukas@...3031... | jeffklukas@...3032...
http://www.hep.wisc.edu/~jklukas/
On Thu, Mar 18, 2010 at 9:42 AM, Armin Moser <armin.moser@...2495...> wrote:
Hi,
you can create your supporting points on a regular r, phi grid and
transform them then to cartesian coordinates:from mpl_toolkits.mplot3d import Axes3D
import matplotlib
import numpy as np
from matplotlib import cm
from matplotlib import pyplot as plt
step = 0.04
maxval = 1.0
fig = plt.figure()
ax = Axes3D(fig)# create supporting points in polar coordinates
r = np.linspace(0,1.25,50)
p = np.linspace(0,2*np.pi,50)
R,P = np.meshgrid(r,p)
# transform them to cartesian system
X,Y = R*np.cos(P),R*np.sin(P)Z = ((R**2 - 1)**2)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet)
ax.set_zlim3d(0, 1)
ax.set_xlabel(r'$\phi_\mathrm{real}$')
ax.set_ylabel(r'$\phi_\mathrm{im}$')
ax.set_zlabel(r'$V(\phi)$')
ax.set_xticks([])
plt.show()hth
Arminklukas schrieb:
I'm guessing this is currently impossible with the current mplot3d
functionality, but I was wondering if there was any way I could generate a
3d graph with r, phi, z coordinates rather than x, y, z?The point is that I want to make a figure that looks like the following:
http://upload.wikimedia.org/wikipedia/commons/7/7b/Mexican_hat_potential_polar.svgUsing the x, y, z system, I end up with something that has long tails like
this:
http://upload.wikimedia.org/wikipedia/commons/4/44/Mecanismo_de_Higgs_PH.pngIf I try to artificially cut off the data beyond some radius, I end up with
jagged edges that are not at all visually appealing.I would appreciate any crazy ideas you can come up with.
Thanks,
JeffP.S. Code to produce the ugly jaggedness is included below:
-------------------------------------------------------
from mpl_toolkits.mplot3d import Axes3D
import matplotlib
import numpy as np
from matplotlib import cm
from matplotlib import pyplot as pltstep = 0.04
maxval = 1.0
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-maxval, maxval, step)
Y = np.arange(-maxval, maxval, step)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = ((R**2 - 1)**2) * (R < 1.25)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet)
ax.set_zlim3d(0, 1)
#plt.setp(ax.get_xticklabels(), visible=False)
ax.set_xlabel(r'$\phi_\mathrm{real}$')
ax.set_ylabel(r'$\phi_\mathrm{im}$')
ax.set_zlabel(r'$V(\phi)$')
ax.set_xticks([])
plt.show()--
Armin Moser
Institute of Solid State Physics
Graz University of Technology
Petersgasse 16
8010 Graz
Austria
Tel.: 0043 316 873 8477