使用Matplotlib imshow()函数能否将2D数组显示为极坐标图?

12

我是新手matplotlib(并且非常喜欢它!),但有些沮丧。我有一个极坐标网格,表示为2D数组。(行是径向部分,列是方位角部分)

我已经能够使用pyplot.imshow()将2D数组显示为矩形图像(R vs. theta),并使用pyplot.pcolor()显示为极坐标图。但是,对于我使用的数组大小,pcolor()极其缓慢,因此我想能够使用imshow()将数组显示为极坐标网格。

使用pcolor(),这只需要为子图设置polar=True即可。有没有办法使用imshow()将2D数组显示为极坐标图?而不必对整个数组进行坐标转换? 提前致谢


我刚刚发现了pcolormesh(),但是我遇到了一个AttributeError: ravel。不确定这是什么意思...就像我说的,我对matplotlib很新,并且我必须说文档似乎欠缺 :( - John
你的数组有多大?你的网格是否逻辑上是矩形的? - matt
我已经成功地让pcolormesh()运行起来了,而且它比pcolor()快得多。所以我不再需要使用imshow()了。 我之前使用了x,y=numpy.meshgrid()来确保x、y坐标和2D值数据完全匹配。这些数组的大小从170x314到850x1570不等。 - John
我的经验与你的相同。pcolormesh()比pcolor()快得多。你应该把你的解决方案写成答案并接受它。这将有助于网络了解这两个功能之间的速度差异。 - matt
1个回答

15

经过一些研究,我发现了pcolormesh()函数,证明它比使用pcolor()快得显著,并且与imshow()的速度相当。

以下是我的解决方案:

import matplotlib.pyplot as plt
import numpy as np

#...some data processing

theta,rad = np.meshgrid(used_theta, used_rad) #rectangular plot of polar data
X = theta
Y = rad

fig = plt.figure()
ax = fig.add_subplot(111)
ax.pcolormesh(X, Y, data2D) #X,Y & data2D must all be same dimensions
plt.show()

2
不适用于新版本,仍然需要add_subplot(111, polar='True') - Sleepyhead

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接