在python直方图中强制统一的bin显示宽度,以实现非均匀数据分级

时间:2015-04-29 19:06:19

标签: python matplotlib histogram

我有一组日期对应于几百本书的出版年份。绝大多数是1800到现在。但是少数(<10)是在1800之前但是广泛分散。我想要的是让我的箱子像这样:

[0,1600,1700,1800,1810,1820,... 2000,2010,2020]

但是对于显示的二进制文件,所有像素的宽度都相同。

到目前为止,这是我的代码:

import sys
import csv
import numpy as np
import matplotlib.pyplot as plt
import time
import math as m

def importData(fileName):

  dataArray=[]
  file=open(fileName,'rb')
  data = csv.reader(file,delimiter="\t")
  for row in data:
    dataArray.append(row[4])
  file.close()
  dataArray=np.array(dataArray).astype(int)
  return dataArray

dates = importData("tabulatedDates.dat")

binDivs=np.array([1600,1700]+range(1800,2021,10))

plt.hist(dates,bins=(binDivs),label=["Books"])

plt.xticks(binDivs,rotation=75)
plt.xlim([1600,2020])
plt.minorticks_on()
plt.tick_params(axis='x',which='minor',bottom='off')

plt.grid(True,axis='y',which='both')
plt.xlabel("Year")
plt.ylabel("Number of books published during this period")
plt.title("Published year of recommended books")

plt.show()

这是输出,我想让那些烦人的宽箱与其他箱子的宽度相同,但仍然代表100年

First example

现在我可以使用宽度变量设置这个代码,但是我有一堆丑陋的白色空间,这也是有问题的。

plt.hist(dates,bins=(binDivs),width=10,label=["Books"])

Second example

0 个答案:

没有答案