我正在尝试创建一个“直方图”,除了y轴不应该是bin中数据点的频率。相反,我希望为每个bin设置自己的y轴值。
例如,假设我的x
值是:[1, 2.2, 1.4, 2, 3.3, 2.6, 3, 1.5, 3.9] and my y-values are [1, 2, 2.5, 1, 0.5, 3, 4, 3, 2]
将其视为函数:每个x
值对应于y
-values (即,x
数组的第一个索引中的值映射到y
数组的第一个索引中的值,第二个索引映射到第二个索引中的值,依此类推)。
我希望将x
值放入箱中,并绘制与每个箱的x值相对应的y
值的总和。
例如,假设我要创建3个存储箱。第一个bin将包含x
值1, 1.4, 1.5,
,并且为该bin绘制的是相应y值的总和(因此为1 + 2.5 + 3 = 6.5
)。
我如何才能做到这一点?
编辑:我想一个更简单的问题是:如何创建一个以数字为x轴并带有连续条形图(即条形图之间没有间隙)的条形图?
发布于 2020-09-02 01:43:16
我使用了您的示例数据,下面是代码
import numpy as np
x = np.array([1, 2.2, 1.4, 2, 3.3, 2.6, 3, 1.5, 3.9])
# sort x and y
ind = np.argsort(x)
x1 = x[ind]
y = np.array([1, 2, 2.5, 1, 0.5, 3, 4, 3, 2])
y1 = y[ind]
# count bins
y2, t = np.histogram(x1, bins=3)
ind1 = y2.cumsum()
ind2 = np.array([0]+[e for e in ind1[0:-1]])
# sum based on counts
y_final = [y1[i:j].sum() for (i, j) in zip(ind2, ind1)]
# plot bar, specify the width
fig, ax = plt.subplots(1, 1, figsize=(7.2, 7.2))
ax.bar(t[0:3], y_final, width=np.diff(t)[0])
https://stackoverflow.com/questions/63697432
复制