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

显示具有非常不一致的条柱宽度的直方图

蒋文光
2023-03-14

为了生成此图,我执行了以下操作:

bins = np.array([0.03, 0.3, 2, 100])
plt.hist(m, bins = bins, weights=np.zeros_like(m) + 1. / m.size)

但是,正如您所注意到的,我想绘制每个数据点的相对频率的直方图,其中只有3个具有不同大小的条柱:

bin1 = 0.03 -

bin2 = 0.3 -

bin3=2-

直方图看起来很难看,因为最后一个面元的大小相对于其他面元来说非常大。如何修复直方图?我想改变箱子的宽度,但不想改变每个箱子的范围。

共有2个答案

白芷阳
2023-03-14

如果条柱的实际值并不重要,但是您想要一个数量级完全不同的值的直方图,您可以使用沿x轴的对数标度。这给了你等宽的条

import numpy as np
import matplotlib.pyplot as plt

data = [0.04,0.07,0.1,0.2,0.2,0.8,1,1.5,4,5,7,8,43,45,54,56,99]

plt.hist(data,bins=10**np.linspace(-2,2,5)) 
plt.xscale('log')

plt.show()

当您必须使用 bin 值时,您可以执行

import numpy as np
import matplotlib.pyplot as plt

data = [0.04,0.07,0.1,0.2,0.2,0.8,1,1.5,4,5,7,8,43,45,54,56,99]
bins = [0.03,0.3,2,100] 

plt.hist(data,bins=bins) 
plt.xscale('log')

plt.show()

然而,在这种情况下,宽度并不完全相等,但仍然可读。如果宽度必须相等,并且您必须使用您的箱子,我建议使用@tom的解决方案。

温浩大
2023-03-14

正如@cel所指出的,这不再是一个直方图,但您可以使用plt执行您的要求。条np.直方图。然后只需将xticklabels设置为描述箱子边缘的字符串。例如:

import numpy as np
import matplotlib.pyplot as plt

bins = [0.03,0.3,2,100] # your bins
data = [0.04,0.07,0.1,0.2,0.2,0.8,1,1.5,4,5,7,8,43,45,54,56,99] # random data

hist, bin_edges = np.histogram(data,bins) # make the histogram

fig,ax = plt.subplots()

# Plot the histogram heights against integers on the x axis
ax.bar(range(len(hist)),hist,width=1) 

# Set the ticks to the middle of the bars
ax.set_xticks([0.5+i for i,j in enumerate(hist)])

# Set the xticklabels to a string that tells us what the bin edges were
ax.set_xticklabels(['{} - {}'.format(bins[i],bins[i+1]) for i,j in enumerate(hist)])

plt.show()

编辑

如果更新到matplotlib v1.5.0,您会发现bar,这可以使绘制更加容易(请参阅此处):

hist, bin_edges = np.histogram(data,bins)

ax.bar(range(len(hist)),hist,width=1,align='center',tick_label=
        ['{} - {}'.format(bins[i],bins[i+1]) for i,j in enumerate(hist)])

 类似资料:
  • 我正在尝试在 matplotlib 中绘制具有多个数据序列的直方图。 我有不相等间隔的箱子,但是我想要每个箱子得到相同的宽度。所以我这样使用属性< code>width: 结果是: 我怎样才能去掉两个系列的两个对应箱子之间的边距?一、 e.如何为每个箱子分组不同系列的钢筋? 谢谢

  • 我试图从下面的论文(http://dx.doi.org/10.1016/j.envsci.2011.08.004)中复制图表图1的概念: 它是一个直方图,其箱子宽度取决于的值,其高度取决于变量。图表中的精确值并不重要,而是要了解如何复制它。 以下代码为每个创建了一个具有两个特征的数据帧(and measure的宽度是减量,

  • 我正在尝试创建一个具有自定义垃圾箱范围的直方图。但是,正如您在下面的直方图中看到的,垃圾箱宽度不是恒定的大小。 理想情况下,我想要这样的东西。箱之间的间距并不重要,我只是希望每个箱子/列的宽度相同: 我用来生成第一个直方图的代码是:

  • 我正在尝试绘制一个只有线条但笔画宽度不同的对象。这可能吗? 我的尝试: 不成功,最后一个笔画宽度用于整个< code >路径。

  • 我花了一些时间在互联网上寻找这个问题的答案,我也试着在SO的所有地方寻找答案,但我想我没有正确的术语……请原谅,如果这是某个已知问题的重复,我很乐意删除我的帖子,改为引用该帖子! 无论如何,我试图在Matplotlib中的同一图形上绘制两个直方图。我的两个数据源是包含 500 个元素的列表。要说明我面临的问题,请参阅下图: 如您所见,在默认参数下,直方图具有不均匀的条块大小,即使条块的数量是相同的

  • 我想可视化位图文件中不同颜色的数量。 我的数据表看起来像: 我想通过使用gnu绘图直方图样式,用自己的颜色绘制每个颜色条。 我只是通过使用“lc变量”来尝试一些东西,但它不起作用。:-( 现在我的GNUPLOT脚本: 我收到了以下错误消息: 谁能给我一个提示或正确的命令? 向罗伯特问好