我想知道如何创建一个饼图,其饼干大小相等,每段的颜色代表该段的频率?
这也称为时钟字形。我的目标是将饼图分成24个段,并绘制几个小时的频率数据,其中频率将根据颜色图确定小时段的颜色。
数据将是这样的(持续5小时):
data = [3,34,76,11,90]
我的colourmap(mycm)是:
mycm = LinearSegmentedColormap.from_list('mycm',['k','r'])]
为了创建相等的片段,我想我会使用类似的东西:
plt.pie([1,1,1,1,1], labels=None, shadow=False, radius=0.5)
但是,如何使用我根据数据中的频率值定义的颜色图对颜色进行着色?
提前致谢!
答案 0 :(得分:2)
您需要的代码位于下方,并根据Coloring slices of pie chart in matplotlib python进行了调整。基本上,每个切片的压裂都具有相同的值(因此所有切片的大小相同),但颜色通过colors参数更改。您可以根据频率或其他任何您想要的颜色来映射颜色。
fracs = ones(len(data))*1/len(data)
my_norm = matplotlib.colors.Normalize(min(data),max(data)) #this is how we will map our data
c1 = matplotlib.colors.LinearSegmentedColormap.from_list('mycm',['k','r'])
plt.pie(fracs, labels=None, shadow=False, radius=0.5, colors=c1(my_norm(data)))
根据数据的分布情况,您可能仍然会得到一张饼图,看起来您只有几种颜色,因为我们使用线性映射将数据点映射到颜色。如果需要非线性映射,可以在映射数据的方式(my_norm函数)中进行更改。例如,您可以在色轮周围构建一个相等距离的颜色数组,以获得N种颜色之间的最大差异,并循环显示颜色,而不是映射颜色。