Matplotlib的contour()
函數需要將數據排列爲每個網格點的2D網格點和相應的網格值。如果您的數據自然排列在網格中,則可以將r,theta轉換爲x,y並使用contour(r*np.cos(theta), r*np.sin(theta), values)
來繪製您的圖。
如果您的數據不是自然網格化的,則應遵循Stephen的建議並使用griddata()
將數據插值到網格上。
以下腳本顯示了兩者的示例。
import pylab as plt
from matplotlib.mlab import griddata
import numpy as np
# data on a grid
r = np.linspace(0, 1, 100)
t = np.linspace(0, 2*np.pi, 100)
r, t = np.meshgrid(r, t)
z = (t-np.pi)**2 + 10*(r-0.5)**2
plt.subplot(121)
plt.contour(r*np.cos(t), r*np.sin(t), z)
# ungrid data, then re-grid it
r = r.flatten()
t = t.flatten()
x = r*np.cos(t)
y = r*np.sin(t)
z = z.flatten()
xgrid = np.linspace(x.min(), x.max(), 100)
ygrid = np.linspace(y.min(), y.max(), 100)
xgrid, ygrid = np.meshgrid(xgrid, ygrid)
zgrid = griddata(x,y,z, xgrid, ygrid)
plt.subplot(122)
plt.contour(xgrid, ygrid, zgrid)
plt.show()
感謝非常明確的答案。我發佈了關於座標軸的後續問題 - http://stackoverflow.com/questions/6556361/add-polar-axes-to-cartesian-plot-in-matplotlib。我想知道你是否可以提供幫助? – robintw