Matplotlib-hist-直方图(条形统计图)

2023-10-25 00:59

本文主要是介绍Matplotlib-hist-直方图(条形统计图),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。
直方图是数值数据分布的精确图形表示。 这是一个连续变量(定量变量)的概率分布的估计,并且被卡尔·皮尔逊(Karl Pearson)首先引入。它是一种条形图。 为了构建直方图,第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。 这些值通常被指定为连续的,不重叠的变量间隔。 间隔必须相邻,并且通常是(但不是必须的)相等的大小。(取自百度百科),简单过一下就好,无需在此处花时间。

一、简单直方图

1.代码

import numpy as np
import matplotlib.pyplot as pltx = 100 + 15 * np.random.randn(1000)fig, ax = plt.subplots()ax.hist(x, 20)       #载入数据ax.set_xlabel('this is X')     #设置X轴标签
ax.set_ylabel('this is Y')     #设置Y轴标签
ax.set_title('this is title')  #设置直方图名称plt.show()

2.运行结果

3.注释

1.ax.hist(x, 20)用于绘制直方图,1其中的x为随机产生的1000组数据。

#函数参数,了解即可无需深入
matplotlib.pyplot.hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, *, data=None, **kwargs)

x:输入值,这需要单个数组或不需要具有相同长度的数组序列
bins:如果一个整数,bins +1,则计算并返回bin边缘,与之一致numpy.histogram()

其他参数我会在后面的教程中再进一步作出讲解,了解到这就OK了,贪多嚼不烂。


2.fig, ax = plt.subplots()是一个将多组数据放到一张图显示的操作,可以简单理解为多图合一操作。

其返回值
fig: matplotlib.figure.Figure 对象
ax:子图对象( matplotlib.axes.Axes)或者是他的数组

#函数定义看看就好了
def subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True,subplot_kw=None, gridspec_kw=None, **fig_kw):fig = figure(**fig_kw)axs = fig.subplots(nrows=nrows, ncols=ncols, sharex=sharex, sharey=sharey,squeeze=squeeze, subplot_kw=subplot_kw,gridspec_kw=gridspec_kw)return fig, axs

3.numpy.random.randn(d0,d1,…,dn):randn函数返回一个或一组样本,具有标准正态分布。dn表格每个维度,返回值为指定维度的array。看代码的直观体现。

np.random.randn() # 当没有参数时,返回单个数据
#输出:-0.30117911192292973np.random.randn(2,4)
'''
输出:
array([[-0.05176012, -0.04370378, -1.35124873,  1.56260502],[ 0.28565732, -1.80031882,  0.10318817,  1.05343294]])
'''np.random.randn(4,3,2)
'''
输出:
array([[[ 0.54162814,  0.27067592],[-0.67345926, -0.7830058 ],[-0.52516213, -0.47652656]],[[-1.30022682,  0.23293469],[-1.54155924,  0.04649326],[ 0.06110925,  0.96038355]],[[-1.73759172,  1.0053545 ],[ 1.49968693,  0.50646915],[-0.1132959 , -0.42487007]],[[ 0.78368072,  1.80768154],[-0.49297587,  0.66436509],[ 0.35496744,  0.52050209]]])
'''

二、代码进阶

1.代码

import numpy as np
import matplotlib.pyplot as pltn_bins = 10
x = np.random.randn(1000, 3)fig, axes = plt.subplots(nrows=2, ncols=2)    #subplots创建多个子图
ax0=axes[0,0]
ax1=axes[0,1]
ax2=axes[1,0]
ax3=axes[1,1]colors = ['red', 'tan', 'lime']
ax0.hist(x, n_bins, density=True, histtype='bar', color=colors, label=colors)
ax0.legend(prop={'size': 8})
ax0.set_title('bars with legend')ax1.hist(x, n_bins, density=True, histtype='bar', stacked=True)
ax1.set_title('stacked bar')ax2.hist(x, n_bins, histtype='step', stacked=True)
ax2.set_title('stack step (unfilled)')x_multi = [np.random.randn(n) for n in [10000, 5000, 2000]]
ax3.hist(x_multi, n_bins, histtype='bar')
ax3.set_title('different sample sizes')fig.tight_layout()   #自动调整子图参数
plt.show()

2.运行结果

3.注释

1.plt.subplots(nrows=2, ncols=2)创建一个2*2的图像,即将四张图放在一张大图上显示。

nrows,ncols:整型,可选参数,默认为1。表示子图网格(grid)的行数与列数。

#函数参数,了解即可无需深入
matplotlib.pyplot.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)

plt.subplots()与plt.subplot()的比较及其比较参见博客文章:【待写,记得提醒我啊】


2.ax.hist(density=True, histtype='bar', stacked=True)
density:如果是True,则返回元组的第一个元素为概率密度,即直方图面积和为1。
官网原文是

If True, the first element of the return tuple will be the counts normalized to form a probability density, i.e., the area (or integral) under the histogram will sum to 1. This is achieved by dividing the count by the number of observations times the bin width and not dividing by the total number of observations. If stacked is also True, the sum of the histograms is normalized to 1.

histtype:参数说明
bar”是传统的条形直方图。如果给定多个数据,则条并排排列。
barstacked”是一种条形直方图,其中多个数据相互叠加。
step”生成默认为未填充的线条图。
stepfilled”生成默认填充的线条图。

stacked:如果为True,则多个数据堆叠在一起;如果为False,则多个数据并排排列;默认为False。参照图一与图二。


3.fig.tight_layout():会自动调整子图参数,使它填充整个图像区域。它仅仅检查坐标轴标签、刻度标签以及标题的部分。看例子

(这两张截图取自网络,侵删)

有不懂的可以在下方留言,我看到会回复的。

这篇关于Matplotlib-hist-直方图(条形统计图)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/278950

相关文章

matplotlib绘图中插入图片

在使用matplotlib下的pyplot绘图时,有时处于各种原因,需要采用类似贴图的方式,插入外部的图片,例如添加自己的logo,或者其他的图形水印等。 一开始,查找到的资料都是使用imshow,但是这会有带来几个问题,一个是图形的原点发生了变化,另外一个问题就是图形比例也产生了变化,当然最大的问题是图形占据了整个绘图区域,完全喧宾夺主了,与我们设想的只在绘图区域中占据很小的一块不相符。 经

matplotlib中文乱码问题

在使用Matplotlib进行数据可视化的过程中,经常会遇到中文乱码的问题。显示乱码是由于编码问题导致的,而matplotlib 默认使用ASCII 编码,但是当使用pyplot时,是支持unicode编码的,只是默认字体是英文字体,导致中文无法正常显示,所以显示中文乱码。 文本使用系统默认字体、手动指定字体、使用字体管理器来解决。 一、系统默认字体(全局设置字体) 在Matplotlib中

Matplotlib图像读取和输出及jpg、png格式对比,及透明通道alpha设置

图像像素值 图像像素值一般size为3,也就是通道数,分别代表R,G,B,如果只有单一 一个值则表示灰度值,也就是说一张二维图片,当长和宽都为1080时,那么若是灰度图像,图像尺寸为(1080,1080,1)若是RGB图像则为(1080,1080,3), jpg、png图像格式 jpg图像的灰度值范围和RGB范围为[0,255],数值类型为uint8,也就是无符号整数 png图像的灰度值范

使用matplotlib绘制散点图、柱状图和饼状图-学习篇

一、散点图 Python代码如下: num_points = 100x = np.random.rand(num_points) #x点位随机y = np.random.rand(num_points) #y点位随机colors = np.random.rand(num_points) #颜色随机sizes = 1000 * np.random.rand(num_points) # 大

Matplotlib通过axis()配置坐标轴数据详解

坐标轴范围设置 axis()可以直接传入列表[xmin,xmax,ymin,ymax]进行范围设置, 分别可以使用plt.axis()或者画布对象.axis()进行配置 import numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 20, 100)y = x*2plt.plot(x, y, 'r')plt.ax

有无直方图,性能的差距

################################# ###有无直方图,性能的差距### ################################# 实验的环境在redhat平台下的11gr2单实例环境 1、在自己定义的用户下创建表及索引 CREATE TABLE customers AS SELECT * FROM sh.customers; CREATE INDEX cu

【python 图像切割】matplotlib读取图像,裁剪图像

#-*-coding:utf-8-*-import sysreload(sys)sys.setdefaultencoding('utf-8')import matplotlib.pylab as plt# 加载图像im = plt.imread("E:/ID/2.png")print(im.shape)# (y轴像素点数, x轴像素点数,图像通道数)def plti(im, **kw

CUDA:用并行计算的方法对图像进行直方图均衡处理

(一)目的 将所学算法运用于图像处理中。 (二)内容 用并行计算的方法对图像进行直方图均衡处理。 要求: 利用直方图均衡算法处理lena_salt图像 版本1:CPU实现 版本2:GPU实现  实验步骤一 软件设计分析: 数据类型: 根据实验要求,本实验的数据类型为一个256*256*8的整型矩阵,其中元素的值为256*256个0-255的灰度值。 存储方式: 图像在内存中

图像处理:基于直方图矫正的图像色彩均衡

from itertools import chainimport cv2import osimport numpy as npimport datetimeclass BrightnessBalance:def __init__(self):passdef arrayToHist(self,gray):'''计算灰度直方图,并归一化:param gray_path::return:'''

怎么使用matplotlib绘制一个从-2π到2π的sin(x)的折线图-学习篇

首先:如果你的环境中没有安装matplotlib,使用以下命令可以直接安装 pip install matplotlib 如何画一个这样的折线图呢?往下看 想要画一个简单的sin(x)在-2π到2π的折线图,我们要拆分成以下步骤: 先导入相关的库文件 我们需要创建一个数学函数相关的图,需要引入 numpy 我们需要绘制图表,所以需要引入matplotlib来绘制图表创建一个x值的数组从