matplotlib 制作不等间距直方图
最近在做一個項(xiàng)目,需要用到直方圖,不過需要不等間距的,x軸需要設(shè)置成不等的間距。百度了一堆,也沒找到解決方法,后來找到一個,實(shí)際上是做得條形圖,用條形圖,替換成直方圖。因此也不能算是直方圖。
記錄一下過程。
我的數(shù)據(jù)是一個這樣的。
有兩列,這兩列數(shù)據(jù)要放在一個直方圖里,并且是不等間距。而且數(shù)據(jù)都不是均勻的,如果等間距,就有可能造成很多直方很小,不美觀。
?
所以,換一下思路。利用numpy的histogram, 先制作一個不等間距的直方圖數(shù)列,然后用條形圖,把組距和數(shù)列的高度劃出來。
代碼如下:
import re import pandas as pd import os from collections import Counter import time import requests from scrapy import Selector import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)bins = [0, 1, 2, 3, 4, 5, 10, 20, 50, 100, 200] height = [ np.histogram(xs, bins=bins)[0] for xs in [pro_all, pro_valid]] left, n = np.arange(len(bins)-1), len(height)fig, ax = plt.subplots()for j, h in enumerate(height):ax.bar(left + j/n, h, width = 1.0/n, label = leg[j])ax.set_xticks(np.arange(0, len(bins))) ax.set_xticklabels(map(str, bins)) plt.legend(loc = 'upper right')做出來,結(jié)果是這樣的。
?
?這個過程中,注意到numpy的histogram 返回的數(shù)據(jù)是這樣的。
這個數(shù)據(jù),就是按照組距,分別統(tǒng)計(jì)的頻數(shù)。
比如 pro_all 這個變量,在0,這一組的個數(shù)是0個, 在1這一組的個數(shù)是928個, 同樣的
pro_valid這個變量,在0這一組的個數(shù)是826個, 在1這一組個數(shù)是728個。
后面的數(shù)據(jù)都是按照bins這個列表對應(yīng)的。只不過分組的數(shù)量,比bins的長度少1。因?yàn)樽詈笠唤M是區(qū)間100-200, 也就是說,pro_all變量,在100-200之間的個數(shù)是5個,在50-100之間的個數(shù)是25個。
所以,就是用組距作為橫軸,高度作為條形的高度,做了一個條形圖。然后在設(shè)置x坐標(biāo)軸的刻度。添加圖例什么的。
?
總結(jié)
以上是生活随笔為你收集整理的matplotlib 制作不等间距直方图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记录webscraper的使用过程
- 下一篇: 蚊子最喜欢叮什么样的人?