[Python3] Matplotlib —— (六) 频次直方图、数据区间划分和分布密度
文章目录
- 七、频次直方图、数据区间划分和分布密度
- (一)简易频次直方图
- (二)二维频次直方图与数据区间划分
- 1. plt.hist2d:二维频次直方图
- 2. plt.hexbin:六边形区间划分
- 3. 核密度估计
[ Matplotlib version: 3.2.1 ]
七、频次直方图、数据区间划分和分布密度
(一)简易频次直方图
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')date = np.random.randn(1000)plt.hist(data)
自定义频次直方图
plt.hist(data, bins=30, density=True, alpha=0.5, histtype='stepfilled', color='steelblue', edgecolor='none')
同坐标轴的多个频次直方图
用频次直方图对不同分布特征的样本进行对比时,将histtype='stepfilled'
与透明性设置参数alpha
搭配使用的效果非常好
x1 = np.random.normal(0, 0.8, 1000)
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)kwargs = dict(histtype='stepfilled', alpha=0.3, density=True, bins=40)plt.hist(x1, **kwargs)
plt.hist(x2, **kwargs)
plt.hist(x3, **kwargs)
如果只需要简单计算频次直方图(计算每段区间的样本数),而不像画图显示它们,可以直接用np.histogram()
counts, bin_edges = np.histogram(data, bins=5)
counts
# array([ 36, 255, 445, 230, 34])
- 更多详见:matplotlib.pyplot.hist - Matplotlib 3.2.1 documentation
(二)二维频次直方图与数据区间划分
如同将一维数组分为区间创建一维频次直方图,也可以将二维数组按照二维区间进行切分,创建二维频次直方图
首先,用一个多元高斯分布(multivariate Gaussian distribution)生成x轴与y轴的样本数据
mean = [0, 0]
cov = [[1, 1], [1, 2]]
x, y = np.random.multivariate_normal(mean, cov, 10000).T
1. plt.hist2d:二维频次直方图
画二维频次直方图最简单的方法就是使用Matplotlib的plt.hist2d
函数
plt.hist2d(x, y, bins=30, cmap='Blues')
cb = plt.colorbar()
cb.set_label('counts in bin')
plt.hist2d
中,与np.histogram
类似函数是np.histogram2d
counts, xedges, yedges = np.histogram2d(x, y, bins=30)
- 更多详见:matplotlib.pyplot.hist2d - Matplotlib 3.2.1 documentation
2. plt.hexbin:六边形区间划分
二维频次直方图是由与坐标轴正交的方块分割而成的,还有一种常用的方式是用正六边形分割。
Matplotlib提供plt.hexbin
,可以将二维数据集分割成蜂窝状
plt.hexbin(x, y, gridsize=30, cmap='Blues')
cb = plt.colorbar(label='count in bin')
- 更多详见:matplotlib.pyplot.hexbin - Matplotlib 3.2.1 documentation
3. 核密度估计
还有一种评估多维数据分布密度的常用方法是核密度估计(kernel density estimation, KDE)
简单演示如何用KDE方法“抹掉”空间中离散的数据点,从而拟合出一个平滑的函数。(scipy.stats
中有一个快速实现KDE方法)
from scipy.stats import gaussian_kde# 拟合数组维度[Ndim, Nsamples]
data = np.vstack([x, y])
kde = gaussian_kde(data)# 用一对规则的网格数据进行拟合
xgrid = np.linspace(-3.5, 3.5, 40)
ygrid = np.linspace(-6, 6, 40)
Xgrid, Ygrid = np.meshgrid(xgrid, ygrid)
Z = kde.evaluate(np.vstack([Xgrid.ravel(), Ygrid.ravel()]))# 画出结果图
plt.imshow(Z.reshape(Xgrid.shape), origin='lower', aspect='auto',extent=[-3.5, 3.5, -6, 6], cmap='Blues')
cb = plt.colorbar()
cb.set_label('density')
- KDE方法通过不同的平滑带宽长度(smoothing length)在拟合函数的准确性与平滑性之间作出权衡。
- 想找到恰当的平滑带宽长度是件很难的事,
gaussian_kde
通过一种经验方法试图找到输入数据平滑长度的近似最优解。 - 在Scipy的生态系统中还有其他的KDE方法实现,每种版本都有各自优缺点,如
sklearn.neighbors.KernelDensity
,statsmodels.nonparametric.kernel_density.KDEMultivariate
- 用Matplotlib做KDE的可视化图的过程比较繁琐,Seaborn提供了更加简洁的API来创建基于KDE的可视化图
Matplotlib 相关阅读:
[Python3] Matplotlib —— (一) 入门基础
[Python3] Matplotlib —— (二) 简易线形图
[Python3] Matplotlib —— (三) 简易散点图
[Python3] Matplotlib —— (四) 可视化异常处理
[Python3] Matplotlib —— (五) 密度图与等高线图
总结自《Python数据科学手册》
[Python3] Matplotlib —— (六) 频次直方图、数据区间划分和分布密度相关推荐
- 频次直方图、数据区间划分额分布密度——Note_6
1.简单的频次直方图: plt.hist()文档:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.hist.html#matplo ...
- python使用matplotlib可视化堆叠的直方图(stacked histogram plot)、多个类别的数据在直方图区间层面累积堆叠起来
python使用matplotlib可视化堆叠的直方图(stacked histogram plot).多个类别的数据在直方图区间层面累积堆叠起来 目录
- Python 数据分析三剑客之 Matplotlib(六):直方图 / 柱状图 / 条形图的绘制
CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...
- python excel 图表 matplotlib_Python数据可视化:matplotlib 常见图表绘制——直方图
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:斑点鱼 matplotlib常见图表绘制--直方图 series.h ...
- python画误差棒_给妹子讲python-S02E06matplotlib散点图、频次直方图与误差线图
微信公众号: python数据科学家 [要点抢先看] 1.散点图的画法举例 2.频次直方图的画法举例 3.误差线图的画法举例 [妹子说]今天我们继续学习matplotlib绘图的相关内容嘛~ 对,在这 ...
- Python 数据分析三剑客之 Pandas(六):GroupBy 数据分裂、应用与合并
CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...
- OpenCV学习笔记(十六):直方图均衡化:equalizeHist()
OpenCV学习笔记(十六):直方图均匀化:equalizeHist() 参考博客: 直方图均衡化的数学原理 直方图匹配的数学原理 直方图均衡化广泛应用于图像增强中: 直方图均衡化处理的"中 ...
- [Python3] Matplotlib —— (四) 可视化异常处理
文章目录 五.可视化异常处理 (一)基本误差线 (二)连续误差 [ Matplotlib version: 3.2.1 ] 五.可视化异常处理 对任何一种科学测量方法来说,准确地衡量数据误差比数据本身 ...
- Python3 matplotlib+numpy画函数图像
Python3 matplotlib+numpy画函数图像 matplotlib和numpy是python强大的第三方库之二.numpy内置了很多数学函数,而matplotlib则可以用于绘制图像,常 ...
最新文章
- javax.crypto.BadPaddingException: Data must sta...
- 领航的公开课 有空可以看看
- openGL第四讲——像素格式管理
- 用姓名字段统计人数_2019年度全国各地姓名报告分析汇总(全国、深圳、佛山、杭州)...
- 错误计算机怎么打开,电脑开机出错怎么回事
- 前端学习(3079):vue+element今日头条管理-数据筛选处理
- Idea创建web项目,配置tomcat服务器
- 大学用编程每月多赚2000块,是种什么体验?
- NAS新突破,仅需半个 GPU day 即可训练出高性能架构!阿里提出 Zen-NAS
- Linux 基础 (1) - 在Win10上使用Hyper-v虚拟机安装CentOS7
- SubSonic:一个对象的引用是必需的对于非静态字段
- 什么是 CDN 边缘服务器 - Edge Server
- Flixel Dame 坦克大战(二)Dame-editor使用指南
- QMap QList的安全删除操作
- python filter函数_python 内置函数filter
- 尺取法(图文解析、初学推荐)
- 数据恢复 diskginus
- python合并json_组合两个json字典python
- 算法 64式 7、搜索算法整理_第4部分_46到60题
- 理解vuex实现的原理