<p>我得到了一个在S1和S3之间正确填充的解决方案。至于梯度,<code>fill_btween</code>或<code>fill_betweenx</code>需要相同的x或y集,这不是您的情况。对于梯度,@JohanC的近似很好</p>
<pre><code>import numpy as np
import matplotlib.pyplot as plt
def create_archimides_spiral(a=0, b=1, num_spirals=10):
"""
Functions that creates an archimides spiral
"""
th = np.linspace(0, num_spirals*np.pi, num_spirals*100) # The higher the number of splits, the greater the quality of each segment
r = a + b*th
x = r * np.cos(th)
y = r * np.sin(th)
return x, y, r
# create the spirals
x, y, r= create_archimides_spiral(a=0,b=1)
x1, y1, r1 = create_archimides_spiral(a=2, b=1)
x2, y2, r2 = create_archimides_spiral(a=4, b=1)
fig, ax = plt.subplots(1)
ax.plot(x, y, color='black', linewidth=3)
ax.plot(x1, y1, color='gray', linewidth=3)
ax.plot(x2, y2, color='silver', linewidth=3)
ax.fill_between(np.concatenate((x, x1[::-1])), np.concatenate((y, y1[::-1])), color= "red", interpolate=True)
ax.fill(np.concatenate((x1, x2[::-1])), np.concatenate((y1, y2[::-1])), color= "blue")
ax.fill(np.concatenate([x[::-1], x2[0:800]]), np.concatenate([y[::-1], y2[0:800]]), color= "cyan")
ax.set_aspect(1)
</code></pre>
<p>在构造要填充的多边形时必须小心,仅选择x2和y2的一部分</p>
<p><a href="https://i.stack.imgur.com/50KRU.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/50KRU.png" alt="enter image description here"/></a></p>