Python 绘制给定bin端点和值的直方图

Python 绘制给定bin端点和值的直方图,python,numpy,ipython,Python,Numpy,Ipython,假设我有一个bin边数组和一个bin值数组。(基本上是plt.hist的输出)。例如: bins = np.array([1, 2, 3, 4, 5]) vals = np.array([2, 5, 5, 2]) 如何将其绘制为直方图 编辑:为了清楚起见,我的意思是VAL是每个箱子的“高度”,其中len(VAL)+1=len(箱子)如果您使用的是Python3.5,您可以使用pyplot填充函数进行此操作。您可以使用以下代码: import numpy as np import matplot

假设我有一个bin边数组和一个bin值数组。(基本上是
plt.hist
的输出)。例如:

bins = np.array([1, 2, 3, 4, 5])
vals = np.array([2, 5, 5, 2])
如何将其绘制为直方图


编辑:为了清楚起见,我的意思是VAL是每个箱子的“高度”,其中len(VAL)+1=len(箱子)

如果您使用的是
Python3.5
,您可以使用
pyplot
填充
函数进行此操作。您可以使用以下代码:

import numpy as np
import matplotlib.pyplot as plt
bins = np.array([1, 2, 3, 4, 5])
vals = np.array([2, 5, 5, 2])

plt.fill_between(bins,np.concatenate(([0],vals)), step="pre")
plt.show()
这将生成下图: 您可以使用绘图:


诀窍是使用“边”的中点
(bins[1:]+bins[:-1])*.5
,并将宽度设置为
(bins[1]-bins[0])
,假设整个直方图的宽度恒定。

这是不正确的,因为它将使用
vals
作为输入
x
值生成直方图,不是OP要求的箱子栏的实际高度。你是对的@Gabriel。我错误地理解了OP想要从值生成直方图。我更新了答案,使之与问题的答案相对应。我添加了一个与另一个答案不同的选项。不幸的是,它只适用于
Python3.5
。如果要在每个条的轮廓上添加线条,那么
x=np.array([bin,bin,bin]).T.restrape(-1)[1:-1]
y=np.insert(np.array([vals,vals,np.repeat(0,len(vals)))).T.T.restrape(-1),0,0)
plt.plt.plt.plt(x,y)
bins = np.array([1, 2, 3, 4, 5])
vals = np.array([2, 5, 5, 2])
plt.bar((bins[1:] + bins[:-1]) * .5, vals, width=(bins[1] - bins[0]))
plt.show()