<p><strong>更新:</strong>我已经在我的博客<a href="http://blog.rtwilson.com/producing-polar-contour-plots-with-matplotlib/" rel="noreferrer">http://blog.rtwilson.com/producing-polar-contour-plots-with-matplotlib/</a>上写了一篇完整的文章,你可能想先看看。</p>
<p>我试图在matplotlib中绘制一个极轴等高线图。我在互联网上找到了各种各样的资源,(a)我的代码似乎无法正常工作,(b)许多资源看起来相当陈旧,我想知道现在是否有更好的方法。例如,<a href="http://www.mail-archive.com/matplotlib-users@lists.sourceforge.net/msg01953.html" rel="noreferrer">http://www.mail-archive.com/matplotlib-users@lists.sourceforge.net/msg01953.html</a>建议可以做一些事情来尽快改进,那是在2006年!</p>
<p>我很想能够绘制出正确的极坐标曲线图-就像pcolor让你为它的类型绘制一样(见下面的注释部分),但我似乎找不到任何方法来实现这一点,所以我要先转换为笛卡尔坐标。</p>
<p>不管怎样,我有如下代码:</p>
<pre><code>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.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(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)
</code></pre>
<p>当我运行时,得到一个错误<code>TypeError: Inputs x and y must be 1D or 2D.</code>。我不知道为什么我得到这个,因为x和y都是二维的。我做错什么了吗?</p>
<p>而且,将从模型返回的值放入一个列表中,然后对其进行重新格式化,这看起来相当笨拙。有更好的办法吗?</p>