Python调用Matplotlib绘制振动图、箱型图和提琴图
作者:newname 发布时间:2022-02-08 05:56:09
Matplotlib介绍
Matplotlib 是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy ndarray 数组来绘制 2D 图像,它使用简单、代码清晰易懂,深受广大技术爱好者喜爱。
NumPy 是 Python 科学计算的软件包,ndarray 则是 NumPy 提供的一种数组结构。
Matplotlib 由 John D. Hunter 在 2002 年开始编写, 2003 年 Matplotlib 发布了第一个版本,并加入了 BSD 开源软件组织。Matplotlib 1.4 是最后一个支持 Python 2 的版本,它的最新版本 3.1.1 已于 2019 年 7 月 1 日发布。
Matplotlib 提供了一个套面向绘图对象编程的 API 接口,能够很轻松地实现各种图像的绘制,并且它可以配合 Python GUI 工具(如 PyQt、Tkinter 等)在应用程序中嵌入图形。同时 Matplotlib 也支持以脚本的形式嵌入到 IPython shell、Jupyter 笔记本、web 应用服务器中使用。
振动图
振动图也叫磁场图,或量场图,其图像的表现形式是一组矢量箭头,其数学含义是在点 (x,y) 处具有分向量 (u,v)。
Matplotlib 提供绘制量场图的函数,如下所示:
quiver(x,y,u,v)
上述函数表示,在指定的 (x,y) 坐标上以箭头的形式绘制向量,参数说明如下:
参数 | 说明 |
---|---|
x | 一维、二维数组或者序列,表示箭头位置的x坐标。 |
y | 一维、二维数组或者序列,表示箭头位置的y坐标。 |
u | 一维、二维数组或者序列,表示箭头向量的x分量。 |
v | 一维、二维数组或者序列,表示箭头向量的y分量。 |
c | 一维、二维数组或者序列,表示箭头颜色。 |
以下示例,绘制了一个简单的振动图:
import matplotlib.pyplot as plt
import numpy as np
x,y = np.meshgrid(np.arange(-2, 2, 0.2), np.arange(-2, 2, 0.25))
z = x*np.exp(-x**2 - y**2)
#计算数组中元素的梯度
v, u = np.gradient(z, 0.2, 0.2)
fig, ax = plt.subplots()
q = ax.quiver(x,y,u,v)
plt.show()
上述代码执行后,输出结果如下:
图1:振动示例图
箱型图
箱型图(也称为盒须图)于 1977 年由美国著名统计学家约翰·图基(John Tukey)发明。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。
在箱型图中,我们从上四分位数到下四分位数绘制一个盒子,然后用一条垂直触须(形象地称为“盒须”)穿过盒子的中间。上垂线延伸至上边缘(最大值),下垂线延伸至下边缘(最小值)。箱型图结构如下所示:
图1:箱型如结构图
首先准备创建箱型图所需数据:您可以使用numpy.random.normal()函数来创建一组基于正态分布的随机数据,该函数有三个参数,分别是正态分布的平均值、标准差以及期望值的数量。如下所示:
#利用随机数种子使每次生成的随机数相同
np.random.seed(10)
collectn_1 = np.random.normal(100, 10, 200)
collectn_2 = np.random.normal(80, 30, 200)
collectn_3 = np.random.normal(90, 20, 200)
collectn_4 = np.random.normal(70, 25, 200)
data_to_plot=[collectn_1,collectn_2,collectn_3,collectn_4]
然后用 data_to_plot 变量指定创建箱型图所需的数据序列,最后用 boxplot() 函数绘制箱型图,如下所示:
fig = plt.figure()
#创建绘图区域
ax = fig.add_axes([0,0,1,1])
#创建箱型图
bp = ax.boxplot(data_to_plot)
plt.show()
上述代码执行后,输出结果如下:
图2:箱型图输出结果
提琴图
小提琴图(Violin Plot)是用来展示数据分布状态以及概率密度的图表。这种图表结合了箱形图和密度图的特征。小提琴图跟箱形图类似,不同之处在于小提琴图还显示数据在不同数值下的概率密度。
小提琴图使用核密度估计(KDE)来计算样本的分布情况,图中要素包括了中位数、四分位间距以及置信区间。在数据量非常大且不方便一一展示的时候,小提琴图特别适用。
概率密度估计、置信区间、四分位间距都属于统计学中的概念,可自行查阅,这里不做说明。
小提琴图比箱型图能提供了更多的信息。虽然箱型图显示了均值、中位数和上、下四分位数等统计信息,但是小提琴图却显示了数据的完整分布情况,这更利于数据的分析与比对。下面是小提琴图的使用示例:
import matplotlib.pyplot as plt
np.random.seed(10)
collectn_1 = np.random.normal(100, 10, 200)
collectn_2 = np.random.normal(80, 30, 200)
collectn_3 = np.random.normal(90, 20, 200)
collectn_4 = np.random.normal(70, 25, 200)
#创建绘制小提琴图的数据序列
data_to_plot = [collectn_1, collectn_2, collectn_3, collectn_4]
#创建一个画布
fig = plt.figure()
#创建一个绘图区域
ax = fig.add_axes([0,0,1,1])
# 创建一个小提琴图
bp = ax.violinplot(data_to_plot)
plt.show()
输出结果如下:
图1:小提琴图绘制
来源:104.116.116.112.58.47.47.99.46.98.105.97.110.99.104.101.110.103.46.110.101.116.47.109.97.116.112.108.111.116.108.105.98.47.113.117.105.118.101.114.46.104.116.109.108.
猜你喜欢
- 大家都知道,不同字符编码,其在内存占用的字节数不一样。如ASCII编码字符占用1个字节,U
- 我不知道没有他们我该如何生活我编写Python已有5年以上了,我的工具集通常变得越来越小,而不是越来越大。 许多工具不是必需的或无用的,而其
- 本文实例讲述了JS实现淘宝支付宝网站的控制台菜单效果。分享给大家供大家参考。具体如下:这是一款支付宝网站中的控制台总菜单,可实现动画效果的显
- watch除了可以监听数据的变化,路由的变化也能被其监听到效果如下:具体代码当路由发生变化后,在watch中写具体的业务逻辑let vm =
- MySQL中group_concat函数,完整的语法如下:group_concat([DISTINCT] 要连接的字段 [Order BY
- 这是一个系列文章,主要分享python的使用建议和技巧,每次分享3点,希望你能有所收获。1 如何打印更易读的类不推荐方式class Poin
- 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。一个循环在C语言等其他
- Tensorflow中,主要有以下几种数据类型(dtype),在旧版本中,不用加tf也能使用。有符号整型tf.int8:8位整数。tf.in
- python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), i
- pymysql模块的使用查询一条数据fetchone()from pymysql import *conn = connect(  
- 你和用户之间的网站堆栈(简化版)在TXJS大会的最后一天,一个开发者问我:面向对象的CSS没有给你留下一大堆基于表现的class名?网络堆栈
- #!/usr/bin/py2# -*- coding: utf-8 -*-#encoding=utf-8'''
- 刚才好无聊,突然想起来之前做一个课表的点子,于是百度了起来。刚开始,我是这样想的:在写微信墙的时候,用到了urllib2【两行代码抓网页】,
- 例子:http.Handle("/tmpfiles/", http.StripPrefix("/tmpfile
- 公司运营着的网站,流量很大,网站是交互式的,经常在过了三四个月的时候索引生成的碎片就很多,由于很大一部分页面没有生成静态,这就导致网站在打开
- linecache模块接触到linecache这个模块是因为前两天读attrs源码的时候看到内部代码引用了这个模块来模拟一个假文件,带着一脸
- 安装PIL库的时候,直接提示:Python version 2.7 required, which was not found in the
- 前言一些公司内部的CMS系统存在某些内容让指定的用户有权限访问,这时候可以用django自带的权限管理进行限制,比较方便。缺点:django
- 人们常说人生就是一个不断做选择题的过程:有的人没得选,只有一条路能走;有的人好一点,可以二选一;有些能力好或者家境好的人,可以有更多的选择;
- 1、if条件选择# coding:utf-8num = 23if num>2:print("dayu")if nu