Matplotlib柱状图,其中每个bin由附加参数的频率着色

2024-04-27 01:10:21 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有

data = [(1, 'a'), (1, 'b'), (1, 'a'), (2, 'a'), (2, 'b'), (3, 'c'), (3, 'c'), (3, 'c'), (3, 'c')] 

这样每个数据点都有两个属性:

^{pr2}$

我可以在柱状图中显示x,ala:

x = [1, 1, 1, 2, 2, 3, 3, 3, 3]
bins = [1, 2, 3]; f = [3, 2, 4]`. 

然后,使用第二个属性

y = ['a', 'b', 'a', 'a', 'b', 'c', 'c', 'c', 'c']

原始直方图中的每个箱子都有次要参数的频率信息:

bins[0] = {'a': 2, 'b': 1}
bins[1] = {'a': 1, 'b': 1}
bins[2] = {'b': 1, 'c': 3}

使用matplotlib,我可以创建x的基本直方图:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
n, bins, patches = ax.hist(x, 3)

有没有一种聪明的方法来迭代这些补丁,也许,把它们分解成适当大小的矩形,以反映附加信息y?在

在这个例子中,如果我希望'a'red'b'绿色的,而{}是蓝色的,那么第一个bin(x=1)将是三分之二的红色三分之一的绿色,第二个箱子(x=2)将是半红色半绿色,最后一个箱子(x=3)将是四分之一绿色四分之三蓝色。在

Example illustration


Tags: 数据信息data属性matplotlibfigpltax
1条回答
网友
1楼 · 发布于 2024-04-27 01:10:21

我知道这并不是一个完整的答案,但是如果您要重新格式化您的数据,那么您可以使用hist的一些内置功能来避免手工编写所有代码。在

例如,您可以创建一个包含所有x值的列表,其中y值等于'a',另一个y = 'b',最后一个是{}。然后,您可以将这些列表堆叠到另一个列表中,并使用stacked = True对该数据调用hist。在

请参见http://matplotlib.org/1.3.1/examples/pylab_examples/histogram_demo_extended.html(第五个面板向下)以获取图示。在

相关问题 更多 >