Update: 我已经完成了我在博客上发现的方式的完整记录http://blog.rtwilson.com/producing-polar-contour-plots-with-matplotlib/ - 你可能想先检查一下 .
我在互联网上找到了各种资源,(a)我想知道现在是否有更好的方法 . 例如,http://www.mail-archive.com/matplotlib-users@lists.sourceforge.net/msg01953.html建议可以采取措施尽快改进,而那是在2006年!
我希望能够绘制正确的极坐标轮廓图 - 就像pcolor让你为它的绘图类型做的(见下面注释掉的部分),但我似乎无法找到任何方法来做到这一点,所以我是首先转换为笛卡尔坐标 .
无论如何,我有以下代码:
from pylab import *
import numpy as np
azimuths = np.arange(0, 360, 10)
zeniths = np.arange(0, 70, 10)
values = []
for azimuth in azimuths:
for zenith in zeniths:
print "%i %i" % (azimuth, zenith)
# Run some sort of model and get some output
# We'll just use rand for this example
values.append(rand())
theta = np.radians(azimuths)
values = np.array(values)
values = values.reshape(len(zeniths), len(azimuths))
# This (from http://old.nabble.com/2D-polar-surface-plot-td28896848.html)
# works fine
##############
# Create a polar axes
# ax = subplot(111, projection='polar')
# pcolor plot onto it
# c = ax.pcolor(theta, zeniths, values)
# show()
r, t = np.meshgrid(zeniths, azimuths)
x = r*np.cos(t)
y = r*np.sin(t)
contour(x, y, values)
当我运行时,我收到错误 TypeError: Inputs x and y must be 1D or 2D.
. 我不知道为什么我会这样,因为x和y都是2D . 难道我做错了什么?
此外,将我的模型返回的值放入列表然后重新整形它似乎相当笨拙 . 有一个更好的方法吗?
2 回答
x,y和值的形状必须相同 . 您的数据形状是:
所以将轮廓(x,y,值)改为轮廓(x,y,值.T) .
您应该能够像往常一样使用带有极坐标图的
ax.contour
或ax.contourf
...但是您的代码中有一些错误 . 您将事物转换为弧度,但在绘制时使用度数值 . 此外,当它需要theta, r
时,您将r, theta
传递给轮廓 .作为一个简单的例子: