<p>我发现的一种方法是生成一个彩色地图,然后将其投影到极轴上。这是一个有效的例子-它包括一个讨厌的黑客,虽然(明确评论)。我确信有一种方法可以调整限制或者(更难)编写自己的<code>Transform</code>来绕过它,但我还没有完全做到这一点。我以为对<code>Normalize</code>的调用的界限可以做到这一点,但显然不行。</p>
<pre><code>import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
import matplotlib as mpl
fig = plt.figure()
display_axes = fig.add_axes([0.1,0.1,0.8,0.8], projection='polar')
display_axes._direction = 2*np.pi ## This is a nasty hack - using the hidden field to
## multiply the values such that 1 become 2*pi
## this field is supposed to take values 1 or -1 only!!
norm = mpl.colors.Normalize(0.0, 2*np.pi)
# Plot the colorbar onto the polar axis
# note - use orientation horizontal so that the gradient goes around
# the wheel rather than centre out
quant_steps = 2056
cb = mpl.colorbar.ColorbarBase(display_axes, cmap=cm.get_cmap('hsv',quant_steps),
norm=norm,
orientation='horizontal')
# aesthetics - get rid of border and axis labels
cb.outline.set_visible(False)
display_axes.set_axis_off()
plt.show() # Replace with plt.savefig if you want to save a file
</code></pre>
<p>这就产生了</p>
<p><a href="https://i.stack.imgur.com/ZzAii.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ZzAii.png" alt="colorwheel direct from matplotlib"/></a></p>
<p>如果你想要戒指而不是轮子,在<code>plt.show()</code>或<code>plt.savefig</code>之前使用它</p>
<pre><code>display_axes.set_rlim([-1,1])
</code></pre>
<p>这给了</p>
<p><a href="https://i.stack.imgur.com/6ME6s.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/6ME6s.png" alt="color ring"/></a></p>
<hr/>
<p>根据注释中的<a href="https://stackoverflow.com/users/1692028/eelkespaak">@EelkeSpaak</a>-如果您按照OP将图形保存为SVG,这里有一个处理结果图形的提示:结果SVG图像的小元素是接触的和不重叠的。这会导致某些渲染器(Inkscape、Adobe Reader,可能不是打印的)出现模糊的灰色线条。解决这个问题的一个简单方法是使用Inkscape或Illustrator对每个单独的渐变元素应用一个小的缩放比例(例如120%)。注意,您必须将转换分别应用于每个元素(所提到的软件提供了自动执行此操作的功能),而不是应用于整个图形,否则它不会产生任何效果。</p>