如何重新缩放 matplotlib 直方图中的计数

use*_*817 4 python matplotlib histogram

我有一个运行良好的 matplotlib 直方图。

hist_bin_width = 4
on_hist = plt.hist(my_data,bins=range(-100, 200,hist_bin_width),alpha=.3,color='#6e9bd1',label='on')
Run Code Online (Sandbox Code Playgroud)

我想要做的就是按因子重新缩放,比如说,2。我不想改变 bin 宽度,或者改变 y 轴标签。我想获取所有 bin 中的计数(例如 bin 1 有 17 个计数)并乘以 2,这样 bin 1 现在有 34 个计数。

这可能吗?

谢谢你。

Imp*_*est 6

pyplot.histweights参数可用于使用如下因子对每个数据点进行加权

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(42)

data = np.random.normal(50, 20, 10000)

factor = 2
hist_bin_width = 40
plt.hist(data, bins=range(-100, 200, hist_bin_width), 
               weights=factor*np.ones_like(data))
plt.show()
Run Code Online (Sandbox Code Playgroud)


ano*_*non 5

因为这只是 y 轴的简单重新缩放,所以这一定是可能的。之所以出现问题,是因为 Matplotlib 的hist计算绘制直方图,因此难以干预。但是,正如文档中还指出的,您可以使用该weights参数来“绘制已经分箱的数据的直方图”。您可以在第一步中使用 Numpy 的直方图函数对数据进行分箱。然后应用缩放因子很简单:

from matplotlib import pyplot
import numpy

numpy.random.seed(0)
data = numpy.random.normal(50, 20, 10000)
(counts, bins) = numpy.histogram(data, bins=range(101))

factor = 2
pyplot.hist(bins[:-1], bins, weights=factor*counts)
pyplot.show()
Run Code Online (Sandbox Code Playgroud)