<p><a href="https://stackoverflow.com/a/30643392/4177384">@jeanrjc's solution</a>几乎可以让您到达目的地,但它添加了一个完全不必要的白色三角形,这也将隐藏其他对象(参见下图,版本1)。</p>
<p>这是一种更简单的方法,仅添加弧的多边形:</p>
<p>基本上,我们沿着圆的边缘(从<code>theta1</code>到<code>theta2</code>)创建一系列点(<code>points</code>)。这已经足够了,因为我们可以在<code>Polygon</code>构造函数中设置<code>close</code>标志,该标志将从最后一点添加到第一点(创建闭合弧)。</p>
<pre><code>import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import numpy as np
def arc_patch(center, radius, theta1, theta2, ax=None, resolution=50, **kwargs):
# make sure ax is not empty
if ax is None:
ax = plt.gca()
# generate the points
theta = np.linspace(np.radians(theta1), np.radians(theta2), resolution)
points = np.vstack((radius*np.cos(theta) + center[0],
radius*np.sin(theta) + center[1]))
# build the polygon and add it to the axes
poly = mpatches.Polygon(points.T, closed=True, **kwargs)
ax.add_patch(poly)
return poly
</code></pre>
<p>然后我们应用它:</p>
<pre><code>fig, ax = plt.subplots(1,2)
# @jeanrjc solution, which might hide other objects in your plot
ax[0].plot([-1,1],[1,-1], 'r', zorder = -10)
filled_arc((0.,0.3), 1, 90, 180, ax[0], 'blue')
ax[0].set_title('version 1')
# simpler approach, which really is just the arc
ax[1].plot([-1,1],[1,-1], 'r', zorder = -10)
arc_patch((0.,0.3), 1, 90, 180, ax=ax[1], fill=True, color='blue')
ax[1].set_title('version 2')
# axis settings
for a in ax:
a.set_aspect('equal')
a.set_xlim(-1.5, 1.5)
a.set_ylim(-1.5, 1.5)
plt.show()
</code></pre>
<p>结果(版本2):</p>
<p><img src="https://i.stack.imgur.com/Ei7Yd.png" alt="enter image description here"/></p>