11

I really like the polar plot of matplotlib and would love to keep working with it (since my data points are given in polar coordinates anyway and my environment is circular).

However, in the plot, I would like to add circles of given radii at specific points.

Usually, I would do:

 ax = plt.subplot(111)
 ax.scatter(data)
 circle = plt.Circle((0,0), 0.5)
 ax.add_artist(circle)
 plt.show()

However, in polar coordinates, I cannot use circle, since it assumes rectangular coordinates.

Ideas I have come up with are: generating an array of points with constant radial coordinate and an angular coordinate in [0, 2PI] or completely switching to rectangular coordinates. Both solutions are not really satisfactory - can one do any better with matplotlib?

Thanks!

4

1 回答 1

19

您可以设置transform的参数Circle

%matplotlib inline
import pylab as pl
import numpy as np

N = 100
theta = np.random.rand(N)*np.pi*2
r = np.cos(theta*2) + np.random.randn(N)*0.1

ax = pl.subplot(111, polar=True)
ax.scatter(theta, r)
circle = pl.Circle((0.5, 0.3), 0.2, transform=ax.transData._b, color="red", alpha=0.4)
ax.add_artist(circle)

输出:

在此处输入图像描述

或者transform=ax.transProjectionAffine + ax.transAxes如果您不喜欢使用私有属性。

于 2013-11-07T05:40:13.523 回答