为了生成此图,我执行了以下操作:
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-
直方图看起来很难看,因为最后一个面元的大小相对于其他面元来说非常大。如何修复直方图?我想改变箱子的宽度,但不想改变每个箱子的范围。
如果条柱的实际值并不重要,但是您想要一个数量级完全不同的值的直方图,您可以使用沿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的解决方案。
正如@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脚本: 我收到了以下错误消息: 谁能给我一个提示或正确的命令? 向罗伯特问好