matplotlib可视化之hist直方图

发布时间:2025-05-23 15:22

直方图

直方图(英语:Histogram)是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量,一般以长条图(bar)的形式具体表现。因为直方图的长度及宽度很适合用来表现数量上的变化,所以较容易解读差异小的数值.

hist

函数定义:
在向量 x 和 y 指定的位置创建一个包含圆形的散点图,该类型的图形也称为气泡图。

matplotlib.pyplot.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, \*, data=None, \*\*kwargs)[source] 常用参数: x:
数据集,最终的直方图将对数据集进行统计 bins:
统计的区间分布划分,指定bin(箱子)的个数; range:
显示的区间,range在没有给出bins时生效 density:
显示概率密度,默认为false histtype:
可选{'bar', 'barstacked', 'step', 'stepfilled'}之一,默认为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似 align:
可选{'left', 'mid', 'right'}之一,默认为'mid',控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认 log:
默认为False,y坐标轴是否选择指数刻度,在数据分布的范围较大的时候,可以通过log指数刻度来缩小显示的范围。 stacked:
默认为False,是否为堆积状图

hist的详细定义:
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html?highlight=hist#matplotlib.pyplot.hist

示例说明:

import matplotlib.pyplot as plt import numpy as np import matplotlib """ font:设置中文 unicode_minus:显示负好 """ matplotlib.rcParams['font.family'] = ['Heiti TC'] matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号 """ 随机数生成,自动生成正态分布的数据集 """ data = np.random.randn(10000) """ facecolor:长条形的颜色 edgecolor:长条形边框的颜色 alpha:透明度 """ plt.hist(data, bins=40, density=False, facecolor="tab:blue", edgecolor="tab:orange", alpha=0.7) """ xlabel:横轴标签 ylabel:纵轴标签 title:图标题 """ plt.xlabel("区间") plt.ylabel("频数(频数)") plt.title("频数(频率)分布图") plt.show()

扩展应用:

增加不同长条形色彩映射
利用hist函数的三个返回值,对每一个不同区间进行不同颜色的显示.通过这种方式可以直观的看出分布的差异.
n: 数组或数组列表,表明每一个bar区间的数量或者百分比;
bins : 数组,bar的范围和bins参数含义一样;
patches : 列表,每个bar图形对象;

import matplotlib.pyplot as plt import numpy as np import matplotlib """ font:设置中文 unicode_minus:显示负好 """ matplotlib.rcParams['font.family'] = ['Heiti TC'] matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号 """ 随机数生成,自动生成正态分布的数据集 """ data = np.random.randn(10000) """ n: 数组或数组列表,表明每一个bar区间的数量或者百分比 bins : 数组,bar的范围和bins参数含义一样 patches : 列表 或者列表的列表 图形对象 """ n, bins, patches =plt.hist(data, bins=40,) percent = n / n.max() #将percent中的数据进行正则化,这样可以方便的映射到colormap中 norm = colors.Normalize(percent.min(), percent.max()) """ patches为对应每个长条的对象,循环为每个bar条进行颜色的设置. set_facecolor()用来设置条形的颜色 """ for thisfrac, thispatch in zip(percent, patches): color = plt.cm.viridis(norm(thisfrac)) thispatch.set_facecolor(color) """ xlabel:横轴标签 ylabel:纵轴标签 title:图标题 """ plt.xlabel("区间") plt.ylabel("频数(频数)") plt.title("频数(频率)分布图") plt.show()

显示多个数据的直方图
可以在一个图中显示多个数据的直方图,方便对不同数据进行对比.
重点区分坐标系一和坐标系四两者之间显示的区别

import numpy as np import matplotlib.pyplot as plt np.random.seed(64) n_bins = 20 """ 生成为一个纬度为(6000,3)的随机数据 """ x = np.random.randn(6000, 3) """ 生成有两行行列坐标系的画布 """ fig, axes = plt.subplots(nrows=2, ncols=2,figsize=(16,9)) """ 第一坐标系,使用bar条来显示 为了和第四坐标系进行效果对比,次数对三列随机数进行分别显示 """ colors = ['tab:blue', 'tab:orange', 'tab:green'] alpha=[1,0.6,0.3] for index in np.arange(x.shape[1]): axes[0][0].hist(x[:,index], n_bins, density=True, histtype='bar', color=colors[index], label=colors[index],alpha=alpha[index]) #axes[0][0].hist(x, n_bins, density=True, histtype='bar', color=colors, label=colors) axes[0][0].legend(prop={'size': 10}) axes[0][0].set_title('bar hist') """ 第二坐标系,使用bar条来显示,设置的堆积的属性stacked """ axes[0][1].hist(x, n_bins, density=True, histtype='bar', stacked=True) axes[0][1].set_title('stacked bar hist') """ 第三坐标系,使用step来显示,设置的堆积的属性stacked """ axes[1][0].hist(x, n_bins, histtype='step', stacked=True, fill=False) axes[1][0].set_title('stacked step hist') """ 第四坐标系,一次性显示三列数据 """ axes[1][1].hist(x, n_bins, density=True,histtype='bar') axes[1][1].set_title('bat hist') fig.tight_layout() plt.show()

双变量直方图
在进行一维频次直方图绘制之外,可以对二维数组按照二维区间进行二维频次的直方图绘制.

重点:此处使用另外一种方式进行多子图的绘制,利用GridSpec可以更加灵活的多子图的绘制

import matplotlib.pyplot as plt import numpy as np from matplotlib import colors from matplotlib.ticker import PercentFormatter import matplotlib.gridspec as gridspec np.random.seed(64) N_points = 800 n_bins = 40 """ 生成为x,y随机数据 """ x = np.random.randn(N_points) y = 2* x + np.random.randn(N_points) + 5 fig = plt.figure(figsize=(10, 8)) # gridspec的用法,可以使图像横跨多个坐标 G = gridspec.GridSpec(2, 2) #显示第一坐标系,其位置第一行,第一列(G[0, 0]) axes =fig.add_subplot(G[0, 0]) axes.hist(x, bins=n_bins) #显示第二坐标系,其位置第一行,第二列(G[0, 1]) axes =fig.add_subplot(G[0, 1]) axes.hist(y, bins=n_bins) #显示第三坐标系,其位置第二行整行(G[1, :]) axes =fig.add_subplot(G[1, :]) axes.hist2d(x,y, bins=n_bins) plt.show()

网址:matplotlib可视化之hist直方图 https://mxgxt.com/news/view/1378770

相关内容

使用Python的Matplotlib库进行数据可视化
透视数据奥秘:Python 数据可视化的力量
2023年可视化数据分析常用函数揭秘:提升决策质量的关键工具
可视化数据图表软件(6款数据可视化软件)
必看!3款地图可视化工具,让数据直观呈现!
利用Python进行数据可视化常见的9种方法!超实用!
可视化图形设计工具,数据可视化工具有哪些
Python 如何使用Python可视化社交网络
数据可视化工具有哪些?
数据分析可视化必备的3款工具分享

随便看看