matplotlib 制作不等间距直方图

最近在做一个项目,需要用到直方图,不过需要不等间距的,x轴需要设置成不等的间距。百度了一堆,也没找到解决方法,后来找到一个,实际上是做得条形图,用条形图,替换成直方图。因此也不能算是直方图。

记录一下过程。

我的数据是一个这样的。

matplotlib 制作不等间距直方图

有两列,这两列数据要放在一个直方图里,并且是不等间距。而且数据都不是均匀的,如果等间距,就有可能造成很多直方很小,不美观。

matplotlib 制作不等间距直方图

所以,换一下思路。利用numpy的histogram, 先制作一个不等间距的直方图数列,然后用条形图,把组距和数列的高度划出来。

代码如下:

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

做出来,结果是这样的。

matplotlib 制作不等间距直方图

这个过程中,注意到numpy的histogram 返回的数据是这样的。

matplotlib 制作不等间距直方图

这个数据,就是按照组距,分别统计的频数。

比如 pro_all 这个变量,在0,这一组的个数是0个, 在1这一组的个数是928个, 同样的

pro_valid这个变量,在0这一组的个数是826个, 在1这一组个数是728个。

后面的数据都是按照bins这个列表对应的。只不过分组的数量,比bins的长度少1。因为最后一组是区间100-200, 也就是说,pro_all变量,在100-200之间的个数是5个,在50-100之间的个数是25个。

所以,就是用组距作为横轴,高度作为条形的高度,做了一个条形图。然后在设置x坐标轴的刻度。添加图例什么的。

Original: https://blog.csdn.net/weixin_40340586/article/details/118873078
Author: JECK_ケーキ
Title: matplotlib 制作不等间距直方图

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/766230/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球