Полярный контурный график в matplotlib - лучший (современный) способ сделать это?

Обновление: Я сделал полное описание способа, который я нашел, чтобы сделать это на моем блоге на 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. Я делаю что-то не так?

Кроме того, кажется довольно неудобным помещать значения, возвращаемые из моей модели, в список, а затем изменять его форму. Есть ли лучший способ сделать это?

19
задан robintw 11 April 2012 в 18:07
поделиться