用 pyplot 绘制一个圆圈 [英] plot a circle with pyplot
问题描述
令人惊讶的是,我没有找到关于如何使用 matplotlib.pyplot(请不要使用 pylab)以输入中心 (x,y) 和半径 r 绘制圆的直接描述.我尝试了一些变体:
surprisingly I didn't find a straight-forward description on how to draw a circle with matplotlib.pyplot (please no pylab) taking as input center (x,y) and radius r. I tried some variants of this:
import matplotlib.pyplot as plt
circle=plt.Circle((0,0),2)
# here must be something like circle.plot() or not?
plt.show()
...但仍然没有让它工作.
... but still didn't get it working.
推荐答案
您需要将其添加到坐标区.Circle
是一个Patch
的子类,并且一个 axes
有一个 add_patch
方法.(您也可以使用 add_artist
但不推荐.)
You need to add it to an axes. A Circle
is a subclass of an Patch
, and an axes
has an add_patch
method. (You can also use add_artist
but it's not recommended.)
以下是执行此操作的示例:
Here's an example of doing this:
import matplotlib.pyplot as plt
circle1 = plt.Circle((0, 0), 0.2, color='r')
circle2 = plt.Circle((0.5, 0.5), 0.2, color='blue')
circle3 = plt.Circle((1, 1), 0.2, color='g', clip_on=False)
fig, ax = plt.subplots() # note we must use plt.subplots, not plt.subplot
# (or if you have an existing figure)
# fig = plt.gcf()
# ax = fig.gca()
ax.add_patch(circle1)
ax.add_patch(circle2)
ax.add_patch(circle3)
fig.savefig('plotcircles.png')
结果如下图:
第一个圆位于原点,但默认情况下 clip_on
为 True
,因此当圆超出 轴
.第三个(绿色)圆圈显示当您不剪辑 Artist
时会发生什么.它超出轴(但不超出图形,即图形大小不会自动调整以绘制您的所有艺术家).
The first circle is at the origin, but by default clip_on
is True
, so the circle is clipped when ever it extends beyond the axes
. The third (green) circle shows what happens when you don't clip the Artist
. It extends beyond the axes (but not beyond the figure, ie the figure size is not automatically adjusted to plot all of your artists).
x、y 和半径的单位默认对应于数据单位.在这种情况下,我没有在我的轴上绘制任何内容(fig.gca()
返回当前轴),并且由于从未设置过限制,它们默认为 x 和 y 范围从0 到 1.
The units for x, y and radius correspond to data units by default. In this case, I didn't plot anything on my axes (fig.gca()
returns the current axes), and since the limits have never been set, they defaults to an x and y range from 0 to 1.
下面是这个例子的延续,展示了单位的重要性:
Here's a continuation of the example, showing how units matter:
circle1 = plt.Circle((0, 0), 2, color='r')
# now make a circle with no fill, which is good for hi-lighting key results
circle2 = plt.Circle((5, 5), 0.5, color='b', fill=False)
circle3 = plt.Circle((10, 10), 2, color='g', clip_on=False)
ax = plt.gca()
ax.cla() # clear things for fresh plot
# change default range so that new circles will work
ax.set_xlim((0, 10))
ax.set_ylim((0, 10))
# some data
ax.plot(range(11), 'o', color='black')
# key data point that we are encircling
ax.plot((5), (5), 'o', color='y')
ax.add_patch(circle1)
ax.add_patch(circle2)
ax.add_patch(circle3)
fig.savefig('plotcircles2.png')
导致:
您可以看到我如何将第二个圆圈的填充设置为 False
,这对于包围关键结果(例如我的黄色数据点)很有用.
You can see how I set the fill of the 2nd circle to False
, which is useful for encircling key results (like my yellow data point).
这篇关于用 pyplot 绘制一个圆圈的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!