<p>您可以在0到2π的范围内绘制许多彼此靠近的缓和曲线。(2 pi是连续环之间的距离。)</p>
<p>注意,作为<code>'0.20'</code>(一个数字字符串)的颜色值对应于<code>0.20</code>的灰色值,其中<code>0</code>为黑色<code>1</code>为白色</p>
<p>还要注意<code>plt.fill_between()</code>假设x值是有序的,但事实并非如此</p>
<p>要获得完全填充的缓和曲线,可以向方程式中添加起始角度,如中心子图所示。右侧子地块使用两种颜色之间的插值</p>
<pre class="lang-py prettyprint-override"><code>import numpy as np
import matplotlib.pyplot as plt
def create_archimides_spiral(a=0, b=1, start_angle=0, num_spirals=10):
th = np.linspace(0, num_spirals * np.pi, num_spirals * 100)
r = a + b * th
x = r * np.cos(th + start_angle)
y = r * np.sin(th + start_angle)
return x, y
fig, axes = plt.subplots(ncols=3)
for ax, largest_a in zip(axes, [2 * np.pi, 2 * np.pi, 1.5 * np.pi]):
a_values = np.linspace(0, largest_a, 100)
grey_values = np.linspace(0, 0.8 if ax == axes[0] else 1, 100)
if ax == axes[1]:
cmap = plt.cm.inferno
elif ax == axes[2]:
cmap = plt.cm.colors.LinearSegmentedColormap.from_list('', ['crimson', 'skyblue'])
for a, grey in zip(a_values, grey_values):
if ax == axes[1]:
x, y = create_archimides_spiral(a=0, b=1, start_angle=a)
else:
x, y = create_archimides_spiral(a=a, b=1, start_angle=0)
ax.plot(x, y, color=f'{grey:.3f}' if ax == axes[0] else cmap(grey))
ax.set_aspect('equal')
plt.show()
</code></pre>
<p><a href="https://i.stack.imgur.com/ijHHo.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ijHHo.png" alt="comparing three plots"/></a></p>