Matplotlib:如何在给定的半径集上绘制同心圆

3

我希望能够在给定的距离集合上绘制同心圆,与源点保持一定的距离。我尝试的第一件事是在极坐标图上绘制弧线,因为这似乎是一个逻辑上的子步骤:

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.plot([1.0,1.5], [5,5], color='r', linestyle='-')
plt.show()

我的第一个问题是这个程序画了一条直线,而不是弧线: polar with straight line 因此,子问题可能是:如何在极坐标图上以给定的半径绘制一个弧线(在这种情况下是 360 度)?另一方面,也许有更好的解决方案,也许不涉及极坐标图。最终,根据标题,我的目标是在中心源周围的一组半径上绘制同心圆。
1个回答

5

易于使用,可随时用它来制作射击目标。

ax.plot(np.linspace(0, 2*np.pi, 100), np.ones(100)*5, color='r', linestyle='-')

只需要想象一下如何在极坐标系中定义一个圆?需要两个东西,即角度和半径。这里用到的是 np.linspace(0, 2*np.pi, 100)np.ones(100)*5。如果你只需要一个弧线,把第一个参数改成小于2pi的数。然后相应地改变第二个参数。 enter image description here 还有其他方法可以实现这一点。如果你想要 .collections.PathCollection object 而不是 Line2D,那么可以使用 plot() 来创建 .lines.Line2D object 对象。
ax.scatter(1, 0, s=100000, facecolors='none')

或者您想制作补丁:

ax.bar(0, 5, 2*np.pi, bottom=0.0, facecolor='None') #need to modified the edge lines or won't look right

看起来是一个公平的解决方案。我理解这个方法实际上是通过绘制大量(100)的小直线段,而不是弧形本身来实现的?虽然在实践中可能不会出现问题,但如果存在绘制弧形的特定方法或不存在该方法,那就最好知道一下。 - Bryce Thomas
1
@Bryce Thomas,如果你想在笛卡尔坐标系中绘制 y=sin(x),那么在 matplotlib 中你会做相同的事情,对吧?如果你不喜欢这个方法,我刚刚添加了其他的方法。 - CT Zhu

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