matplotlib数据可视化简明教程----下(以及random的一些函数应用)

我们先来说一下当我们需要大量特定的随机数据时,如何用random模块实现呢?
1、numpy.random.seed()与numpy.random.RandomState(),这两个功能都是使每次随机生成数一样
2、numpy.random.rand()
官方文档中给出的用法是:numpy.random.rand(d0,d1,…dn)
以给定的形状创建一个数组,并在数组中加入在[0,1]之间均匀分布的随机样本。
例如:a=np.random.rand(3,3),就是创建一个3行3列的二维数组,里面的数字是0到1的随机数。
3、numpy.random.randn()
官方文档中给出的用法是:numpy.random.rand(d0,d1,…dn)
以给定的形状创建一个数组,数组元素来符合****标准正态分布N(0,1)
4、numpy.random_sanmple()
官方文档中给出的用法是:
numpy.random.random_sample(size=None)
以给定形状返回[0,1)之间的随机浮点数
5、numpy.random.choice()
官方文档中给出的用法:
numpy.random.choice(a,size=None,replace=True,p=None)
若a为数组,则从a中选取元素;若a为单个int类型数,则选取range(a)中的数
replace是bool类型,为True,则选取的元素会出现重复;反之不会出现重复
p为数组,里面存放选到每个数的可能性,即概率 。

1、频次直方图、数据区间划分和分布密度
频次直方图、数据区间划分和分布密度。

`plt.style.use('seaborn-white') 
 data = np.random.randn(1000) 
plt.hist(data)`

其中hist可以加很多参数调整效果,最主要的就是bins,代表x轴有几个分类。
在这里插入图片描述

就像将一维数组分为区间创建一维频次直方图一样,我们也可以将二维 数组按照二维区间进行切分,来创建二维频次直方图。下面将简单介绍几种创建二维频次直方图的方法。首先,用一个多元高斯分布 (multivariate Gaussian distribution)生成 x 轴与 y 轴的样本数据:

mean = [0, 0] 
cov = [[1, 1], [1, 2]] 
x, y = np.random.multivariate_normal(mean, cov, 10000).T
plt.hist2d(x, y, bins=30, cmap='Blues') 
cb = plt.colorbar() 
cb.set_label('counts in bin')

在这里插入图片描述
plt.hexbin:六边形区间划分 二维频次直方图是由与坐标轴正交的方块分割而成的,还有一种常 用的方式是用正六边形分割。Matplotlib 提供了 plt.hexbin 满足 此类需求,将二维数据集分割成蜂窝状。
plt.hexbin(x, y, gridsize=30, cmap=‘Blues’)
cb = plt.colorbar(label=‘count in bin’)
在这里插入图片描述
核密度估计
还有一种评估多维数据分布密度的常用方法是核密度估计(kernel density estimation,KDE)。我们将在后面详细介绍这种方法,他的作用是拟合出一个平滑的函数,使图像看起来平滑。在 scipy.stats 程序包里面有 一个简单快速的 KDE 实现方法。

2、多子图
有时候需要从多个角度对数据进行对比。Matplotlib 为此提出了子图 (subplot)的概念:在较大的图形中同时放置一组较小的坐标轴。这些 子图可能是画中画(inset)、网格图(grid of plots),或者是其他更复 杂的布局形式。我们介绍四种创建子图的方法。
1、plt.axes()
创建坐标轴最基本的方法就是使用 plt.axes 函数。前面已经介绍过, 这个函数的默认配置是创建一个标准的坐标轴,填满整张图。它还有一 个可选参数,由图形坐标系统的四个值构成。这四个值分别表示图形坐 标系统的 [bottom, left, width, height](底坐标、左坐标、宽度、高度),数值的取值范围是左下角(原点)为 0,右上角为 1。 如果想要在右上角创建一个画中画,那么可以首先将 x 与 y 设置为 0.65(就是坐标轴原点位于图形高度 65% 和宽度 65% 的位置),然后 将 x 与 y 扩展到 0.2(也就是将坐标轴的宽度与高度设置为图形的 20%)。

 ax1 = plt.axes() # 默认坐标轴 
 ax2 = plt.axes([0.65, 0.65, 0.2, 0.2])

在这里插入图片描述
2.2 plt.subplot:简易网格子图
若干彼此对齐的行列子图是常见的可视化任务,Matplotlib 拥有一些可 以轻松创建它们的简便方法。最底层的方法是用 plt.subplot() 在一 个网格中创建一个子图。这个命令有三个整型参数——将要创建的网格 子图行数、列数和索引值,索引值从 1 开始,从左上角到右下角依次增大。
在这里插入图片描述
plt.subplots_adjust 命令可以调整子图之间的间隔。

2.3 plt.subplots()
当你打算创建一个大型网格子图时,就没办法使用前面那种亦步亦趋的 方法了,尤其是当你想隐藏内部子图的 x 轴与 y 轴标题时。出于这一需 求,plt.subplots() 实现了你想要的功能(需要注意此处 subplots 结尾多了个 s)。这个函数不是用来创建单个子图的,而是用一行代码创建多个子图,并返回一个包含子图的 NumPy 数组。关键参数是行数 与列数,以及可选参数 sharex 与 sharey,通过它们可以设置不同子 图之间的关联关系。
2.4 plt.GridSpec()
如果想实现不规则的多行多列子图网格,plt.GridSpec() 是最好的工 具。plt.GridSpec() 对象本身不能直接创建一个图形,它只是 plt.subplot() 命令可以识别的简易接口。
3,4两种方法具体实现大家可以自行查阅,我仅仅是抛砖引玉。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值