为极坐标创建一个meshgrid

时间:2015-03-08 13:13:13

标签: python numpy plot polar-coordinates

我想使用以下数组为极坐标创建网格。

R = 1.15
r = numpy.linspace(R,5,100)
theta = numpy.linspace(0,2*numpy.pi,145)

我尝试了这种方式,使用numpy

X,Y=numpy.meshgrid(r*numpy.cos(theta),r*numpy.sin(theta))

但是我收到了这个错误:

ValueError: operands could not be broadcast together with shapes (100,) (145,) 

如何生成网格并显示点?

1 个答案:

答案 0 :(得分:5)

如果您只想要两个在极坐标网格上指定坐标rtheta的2D数组,请不要转换为笛卡尔坐标系。

澄清一下,您所看到的错误是因为您无法在两个不等形状的数组之间执行元素相乘,这就是您所拥有的。

你应该这样称呼它:

radius_matrix, theta_matrix = numpy.meshgrid(r,theta)

然后您可以通过输入以下内容转换为笛卡尔坐标(如果确实需要):

X = radius_matrix * numpy.cos(theta_matrix)
Y = radius_matrix * numpy.sin(theta_matrix)

可以立即在极地网格上进行可视化,例如使用例如matplotlib:

import matplotlib.pyplot as plt
ax = plt.subplot(111, polar=True)
ax.plot(theta_matrix, radius_matrix, color='r', ls='none', marker='.')

如果你想要另一个例子,请查看polar plot demo

或者,您可以通过绘制我们先前在笛卡尔网格上获得的笛卡尔坐标来绘制您绘制的极坐标网格:

plt.plot(X,Y, 'r. ')
plt.show()