【发布时间】:2012-02-22 16:08:56
【问题描述】:
更新:我已经在我的博客http://blog.rtwilson.com/producing-polar-contour-plots-with-matplotlib/ 上完成了关于我发现这样做的方式的完整记录 - 你可能想先查看那里。
我正在尝试在 matplotlib 中绘制极坐标等值线图。我在互联网上找到了各种资源,(a)我似乎无法让我的代码工作,并且(b)许多资源看起来很旧,我想知道现在是否有更好的方法。例如,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 的。我做错了吗?
此外,将从模型返回的值放入列表然后对其进行重新整形似乎相当笨拙。有没有更好的方法来做到这一点?
【问题讨论】:
标签: python numpy matplotlib