我想用Python创建一个颜色轮,最好使用Matplotlib。以下代码效果还可以:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
xval = np.arange(0, 2*pi, 0.01)
yval = np.ones_like(xval)
colormap = plt.get_cmap('hsv')
norm = mpl.colors.Normalize(0.0, 2*np.pi)
ax = plt.subplot(1, 1, 1, polar=True)
ax.scatter(xval, yval, c=xval, s=300, cmap=colormap, norm=norm, linewidths=0)
ax.set_yticks([])
但是,这个尝试有两个严重的缺点。
首先,将结果保存为矢量图(figure_1.svg)时,颜色轮由621个不同的形状组成,对应于正在绘制的不同(x,y)值。虽然结果看起来像一个圆,但实际上不是真正的圆。我非常希望使用一个真正的圆,由几个路径点和它们之间的Bezier曲线定义,例如matplotlib.patches.Circle
。这对我来说似乎是“正确”的方法,并且结果看起来更漂亮(没有条纹,更好的渐变,更好的抗锯齿)。
其次(相关性更强),最终绘制的标记(前几个标记)2*pi
与前几个重叠。在像素渲染中很难看到,但如果你放大基于矢量的渲染,你可以清楚地看到最后的圆盘重叠在前几个圆盘上。
我尝试使用不同的标记(.
或|
),但它们都无法解决第二个问题。
底线: 在Python/Matplotlib中我能够画一个用适当的矢量/Bezier曲线定义的圆,并且边缘颜色是根据colormap(或者任意颜色渐变)定义的吗?
ColorbarBase
来做一些东西,但是错过了orientation
关键字。这个解决方案肯定比我的好(因为现在轮子上的“辐条”不再重叠),但它仍然不是我想要的解决方案,因为生成的矢量图仍然包含许多单独的路径元素,而不是一个单一的贝塞尔曲线圆。无论如何,非常感谢;如果没有人提出真正的解决方案,我将把你的答案标记为已接受 :) - EelkeSpaak