Python matplotlib - 如何使用代表频率的颜色创建饼图?

时间:2013-10-30 12:23:53

标签: python matplotlib pie-chart color-mapping

我想知道如何创建一个饼图,其饼干大小相等,每段的颜色代表该段的频率?

这也称为时钟字形。我的目标是将饼图分成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)

但是,如何使用我根据数据中的频率值定义的颜色图对颜色进行着色?

提前致谢!

1 个答案:

答案 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种颜色之间的最大差异,并循环显示颜色,而不是映射颜色。