2016-04-09 4 views
4

Я хочу построить параболоид f (r) = r ** 2 как двумерную полярную тепловую карту. Выход я ожидаю enter image description hereПолярные тепловые карты в питоне

код, который я написал

from pylab import* 
from mpl_toolkits.mplot3d import Axes3D 
ax = Axes3D(figure()) 
rad=linspace(0,5,100) 
azm=linspace(0,2*pi,100) 
r,th=meshgrid(rad,azm) 
z=(r**2.0)/4.0 
subplot(projection="polar") 
pcolormesh(r,th, z) 
show() 

Но эта программа возвращает следующее изображение. enter image description here

Может кто-нибудь помочь? Заранее спасибо.

ответ

2

Я думаю, что вы случайно перепутали radius, zenith и azimuth :)

Строит, что я думаю, что вы хотите:

import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 

fig = plt.figure() 
ax = Axes3D(fig) 

rad = np.linspace(0, 5, 100) 
azm = np.linspace(0, 2 * np.pi, 100) 
r, th = np.meshgrid(rad, azm) 
z = (r ** 2.0)/4.0 

plt.subplot(projection="polar") 

plt.pcolormesh(th, r, z) 
#plt.pcolormesh(th, z, r) 

plt.plot(azm, r, color='k', ls='none') 
plt.grid() 

plt.show() 

enter image description here

Если вы хотите линии луча сетки, вы можете добавьте их каждые Theta следующим образом:

plt.thetagrids([theta * 15 for theta in range(360//15)]) 

enter image description here

и более радиальные сетки, как это:

plt.rgrids([.3 * _ for _ in range(1, 17)]) 

enter image description here

PS: NumPy и pyplot будет держать пространство имен аккуратный ...