гистограмма matplotlib с частотой и количеством

У меня есть данные (из текстового файла с разделителями пробела с двумя столбцами), который уже вставлен, но только шириной 1. Я хочу увеличить эту ширину примерно до 5. Как это сделать, используя numpy / matplotlib в Python?

С помощью,

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 

Что делать, если вы используете 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() 

Я не эксперт в matplotlib, но я считаю, что история невероятно полезна. Примеры на сайте matplotlib дают большой обзор некоторых функций.

Я не знаю, как использовать предоставленные образцы данных без их преобразования. Я изменил ваш пример, чтобы деквантовать эти данные, прежде чем создавать гистограмму.

Я вычислил размер бункера, используя первый ответ этого вопроса .

 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() 

Эта гистограмма отображается следующим образом. Гистограмма с шириной бина 5

Надеюсь, этот пример полезен.