当前位置: 首页 > 知识库问答 >
问题:

Matplotlib直方图,其中每个箱子由附加参数的频率着色

倪振海
2023-03-14

如果我有

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

每个数据点有两个属性:

x, y = zip(*data)

我可以在直方图中显示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'是红色的,'b'是绿色的,'c'是蓝色的,那么第一个bin(x=1)将是三分之二的红色和三分之一的绿色,第二个箱子(x=2)将是一半红色和一半绿色,最后一个箱子(x=3)将是四分之一绿色和四分之三蓝色。

示例插图

共有1个答案

敖涵容
2023-03-14

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

例如,您可能会列出包含所有x值的列表,其中y值等于'a',另一个包含y='b',最后一个包含y='C'.然后,您可以将这些列表堆叠到另一个列表中,并对该数据调用hist,其中堆叠=True

见http://matplotlib.org/1.3.1/examples/pylab_examples/histogram_demo_extended.html(第5个面板)的插图。

 类似资料:
  • 我使用matplotlib在python中绘制直方图,方法是: 是否可以打印包含所有存储箱信息的数据框,如每个存储箱中的元素数量?

  • 在Matplotlib中创建堆叠直方图时,我注意到箱宽缩小了。在这个简单的例子中: 我得到以下输出: 请注意,左侧的直方图在每个存储区之间都有行间距,即使左侧和右侧直方图都使用相同的存储区。 有没有办法纠正这种行为?我想在左边的直方图使用完整的箱子宽度,这样相邻的箱子共享一条边。

  • 我有一个带有值的数组,我想创建它的直方图。我主要对低端号码感兴趣,想把300以上的每一个号码都收集在一个箱子里。此箱应与所有其他(等宽)箱具有相同的宽度。我该怎么做呢? 注:此问题与此问题相关:在Matplotlib直方图中定义仓位宽度/x轴比例 这就是我迄今为止所尝试的: 然后,我更改了其中包含xlim的行: 它看起来或多或少像我想要的,但是最后一个垃圾箱现在看不见了。我错过了哪一个技巧来可视化

  • 我用matplotlib生成直方图。 我需要箱子的宽度不相等,因为我对最低的条柱最感兴趣。现在我正在这样做: 这创建了我想要的(前5个条柱的宽度为10,其余50条箱的宽度),但前五个条柱当然比后一个条柱窄,因为所有条柱都显示在同一轴上。 有没有办法影响x轴或直方图本身,这样我就可以在前5个箱之后打破刻度,这样所有箱都显示为等宽? (我意识到这将产生一个扭曲的视图,我对此很好,尽管我不介意在轴的两个

  • 我有一个小函数,可以生成两个子情节的情节。一个子图是重叠的两个直方图,另一个子图是一个直方图除以另一个直方图的结果。 对于第二个子图,我不知道如何删除直方图条之间的边(比如上面的那个),也不知道如何降低它的高度(比如说,它是上面那个高度的一半)。我也不知道如何将标题设置到情节的最顶端。 这些事情怎么可能做到? 我的代码如下:

  • 直方图(Histogram),又称质量分布图,它是一种条形图的一种,由一系列高度不等的纵向线段来表示数据分布的情况。 直方图的横轴表示数据类型,纵轴表示分布情况。 首先,我们需要了解柱状图和直方图的区别。直方图用于概率分布,它显示了一组数值序列在给定的数值范围内出现的概率;而柱状图则用于展示各个类别的频数。 例如,我们对某工厂的员工年龄做直方图统计,首先我们要统计出每一位员工的年龄,然后设定一个