我有数据(来自带有两列的空格分隔文本文件),它已经被分箱但宽度只有1.我想将此宽度增加到大约5.如何在Python中使用numpy / matplotlib?
使用,
data = loadtxt('file.txt')
x = data[:, 0]
y = data[:, 1]
plt.bar(x,y)
创建了太多条形图并使用
plt.hist(data)
没有适当地绘制直方图。我想我不明白matplotlib的直方图绘制是如何工作的。
请参阅下面的一些数据。
264 1
265 1
266 4
267 2
268 2
269 2
270 2
271 2
272 5
273 3
274 2
275 6
276 7
277 3
278 7
279 5
280 9
281 4
282 8
283 11
284 9
285 15
286 19
287 11
288 12
289 10
290 13
291 18
292 20
293 14
294 15
答案 0 :(得分:1)
如果您在使用numpy.reshape
之前使用plt.bar
转换数据,该怎么办?
In [83]: import numpy as np
In [84]: import matplotlib.pyplot as plt
In [85]: data = np.array([[1,2,3,4,5,6], [4,3,8,9,1,2]]).T
In [86]: data
Out[86]:
array([[1, 4],
[2, 3],
[3, 8],
[4, 9],
[5, 1],
[6, 2]])
In [87]: y = data[:,1].reshape(-1,2).sum(axis=1)
In [89]: y
Out[89]: array([ 7, 17, 3])
In [91]: x = data[:,0].reshape(-1,2).mean(axis=1)
In [92]: x
Out[92]: array([ 1.5, 3.5, 5.5])
In [96]: plt.bar(x, y)
Out[96]: <Container object of 3 artists>
In [97]: plt.show()
答案 1 :(得分:0)
我不是matplotlib的专家,但我发现hist
非常有用。 matplotlib site上的示例概述了一些功能。
我不知道如何使用您提供的示例数据而不进行转换。在创建直方图之前,我修改了您的示例以对这些数据进行反量化。
我使用this question's first answer计算了bin大小。
import matplotlib.pyplot as plt
import numpy as np
data = np.loadtxt('file.txt')
dequantized = data[:,0].repeat(data[:,1].astype(int))
dequantized[0:7]
# Each row's first column is repeated the number of times found in the
# second column creating a single array.
# array([ 264., 265., 266., 266., 266., 266., 267.])
def bins(xmin, xmax, binwidth, padding):
# Returns an array of integers which can be used to represent bins
return np.arange(
xmin - (xmin % binwidth) - padding,
xmax + binwidth + padding,
binwidth)
histbins = bins(min(dequantized), max(dequantized), 5, 5)
plt.figure(1)
plt.hist(dequantized, histbins)
plt.show()
显示的直方图如下所示。
我希望这个例子很有用。