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!
You can set transform
argument of the 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)
output:
or transform=ax.transProjectionAffine + ax.transAxes
if you don't like using the private attribute.