2

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

这也称为时钟字形。我的目标是将饼图分成 24 段,并绘制几个小时的频率数据,其中频率将根据颜色图确定小时段的颜色。

数据将是这样的(持续 5 小时):

data = [3,34,76,11,90]

我的颜色图(mycm)是:

mycm = LinearSegmentedColormap.from_list('mycm',['k','r'])]

为了创建相等的段,我想我使用类似的东西:

plt.pie([1,1,1,1,1], labels=None, shadow=False, radius=0.5)

但是,如何使用我根据数据中的频率值定义的颜色图为这些着色?

提前致谢!

4

1 回答 1

2

您需要的代码如下,改编自Matplotlib python 中的 Coloring slices of pie chart。基本上,每个切片的碎片都具有相同的值(因此所有切片的大小相同),但颜色通过颜色参数发生变化。您可以根据频率或您可能想要的任何其他内容映射颜色。

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

于 2013-10-30T13:39:19.837 回答