简体   繁体   中英

Matplotlib - Drawing a smooth circle in a polar plot

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM