版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、5 matplotlib-绘制精美的图表 是 最著名的绘图库,它提供了一整套和 相似令 ,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入 应用程序中。它的文档相当完备,并且 页面中有上百幅缩略图,打开之后都有源程序。因此 如果你需要绘制某种类型的图,只需要在这个页面中浏览粘贴一下,基本上都能搞定。本章节作为 的入门介绍,将较为深入地挖掘几个例子,从中理解和 学习 绘图的一些基本概念。5.1 快速绘图 的 提供了和 类似的绘图 ,方便用户快速绘制 图表 。让先来看一个简单的例子:# -*- coding: utf-8 -*- import numpy as np import
2、matplotlib.pyplot as plt 图 5.1 调用pyplot 库快速将数据绘制成曲线图matplotlib 中的快速绘图的函数库可以通过如下语句载入:import matplotlib.pyplot as pltpylab 模块matplotlib 还提供了名为 pylab 的模块,其中包括了许多 numpy 和 pyplot 中常用的函数,方便用户快速进行计算和绘图,可以用于I中的快速交互式使用。接下来调用figure 创建一个绘图对象,并且使它成为当前的绘图对象。plt . figure ( figsize = ( 8 , 4 )也可以不创建绘图对象直接调用接下来的plo
3、t 函数直接绘图,matplotlib 会为自动创建一个绘图对象。如果需要同时绘制多幅图表的话,可以是给 figure 传递一个整数参数指定图标的序号,如果所指定序号的绘图对象已经存在的话,将不创建新的对象,而只是让它成为当前绘图对象。通过figsize 参数可以指定绘图对象的宽度和高度,为英寸;dpi 参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为 80。因此本例中所创建的图表窗口的宽度为 8*80 = 640 像素。中的保存按钮保存下来的 图像的大小是 像素。这是因为保存但是用图表用的函数 使用不同的 配置, 函数也有一个 参数,如果 不设置的话,将使用 配置文件中的配置,此配置可
4、以通过如下语句进行查看,关于配置文件将在后面的章节进行介绍: import matplotlib 下面的两行程序通过调用 函数在当前的绘图对象中进行绘图: 函数的调用方式很灵活,第一句将 数组传递给 之后,用关键字参数指 定各种属性:label 给所绘制的曲线一个名字,此名字在图示中显示。只要在字符串前后添 加符号, 就会使用其内嵌的 引擎绘制的数学公式。color 指定曲线的颜色linewidth 指定曲线的宽度第二句直接通过第三个参数指定曲线的颜色和线型,这个参数称为格式化参数,它能够通过一些易记的符号快速指定曲线的样式。其中 表示蓝色,表示线型为虚线。在 中输入 可以查看格式化字符串的详
5、细配置。接下来通过一系列函数设置绘图对象的各个属性: xlabel 设置 轴的文字 ylabel 设置 轴的文字 title 设置图表的标题 ylim 设置 轴的范围 legend 显示图示最后调用显示 出创建的所有绘图对象。5.1.1 配置属性 所绘制的图的每个组成部分都对应有一个对 象,可以通过调用这些对象的属性设置方法或者 的属性设置函数 设置其属性值。例如 函数返 回一个 对象的列表,下面的例子显示如何设置 对象 的属性: import numpy as np import matplotlib.pyplot as plt # plot 返回一个列表,通过 line,获取其第一个元素
6、# 调用 Line2D 对象的 set_*方法 设置属性值 # 同时绘制 sin 和 cos 两条曲线,lines 是一个有两个 Line2D 对象的列表 # # 调用 setp 函数同时配置多个 Line2D 对象的多个属性值 这段例子中,通过调用 对象 的 方法,关闭对象的反锯 齿效果。或者通过调用 函数配置多个 对象的颜色和线宽属性。同样可以通过调用 对象的方法,或者 函数获取对象的属性 值: # 返回 color 属性 # 输出全部属性 . 注意 函数只能对一个对象进行操作,它有两种用法:指定属性名:返回对象的指定属性的值不指定属性名:打印出对象的所有属性和其值 的整个图表为一个 对象
7、,此对象在调用 函 数时返回,可以通过 函数获取当前的绘图对象:也 . 对象有一个 属性,其值为 对象的列表,每个 对象代表图表中的一个子图,前面所绘制的图表只包含一个子图,当前子图也可以通过 获得: 用 可以发现 对象有很多属性,例如它的 属性为此子 图所包括的 对象列表: #其中的第一条曲线就是最开始绘制的那条曲线 通过这种方法属性。可以很容易地查看对象的属性和它们之间的包含关系,找到需要配置的5.2 绘制多轴图 一个绘图对象(figure)可以包含多个轴(axis),在Matplotlib 中用轴表示一个绘图区域,可以将其理解为子图。上面的第一个例子中,绘图对象只包括一个轴,因此只显示了
8、一个轴(子图)。如下:可以使用subplot 函数快速绘制有多个轴的图表。subplot 函数的调用形式subplot ( numRows , numCols , plotNum )subplot 将整个绘图区域等分为 numRows 行 * numCols 列个子区域,然后按照从左到右,左上的子区域的为 1。如果 numRows,从上到下的顺序对每个子区域进行numCols 和plotNum 这三个数都小于 10 的话,可以把它们缩写为一个整数,例如subplot(323)和 subplot(3,2,3)是相同的。subplot 在plotNum 指定的区域中创建一个轴对象。如果新创建的轴和
9、之前创建的轴的话,之前的轴将被删除。下面的程序创建 3 行 2 列共 6 个轴,通过axisbg 参数给每个轴设置不同的背景颜色。for idx , color in enumerate ( rgbyck ): plt . subplot ( 320 + idx + 1 , axisbg = color ) plt . show ()图 5.2 用subplot 函数将Figure 分为六个子图区域如果希望某个轴占据整个行或者列的话,可以如下调用 subplot:plt . subplot ( 221 ) # 第一行的左图 plt . subplot ( 222 ) # 第一行的右图 plt
10、. subplot ( 212 ) # 第二整行 plt . show ()图 5.3 将 分为三个子图区 域中的 按钮,交 互式地当绘图对象中有多个轴的时候,可以通过调节轴之间的间距和轴与边框之间的距离。如果希望在程序中调节的话,可以调用 函数,它有 等 几个关键字参数,这些参数的值都是 到 之间的小数,它们是以绘图区域的宽高为 进行正规化之后的坐标或者长度。5.3 配置文件 一幅图有许多需要配置的属性,例如颜色、字体、线型等等。在绘图时,并没有一一对这些属性进行配置,许多都直接采用了 的缺省配置。 将缺 省配置保存在一个文件中,通过更改这个文件,可以修改这些属性的缺省值。 使用配置文件 时
11、的搜索顺 序如下:当前路径 程序的当前路径用户配置路径 通常为 ,可以通过环境变量 修 改系统配置路径 保存在 的安装目录下的 下通过下面的语句可以获取用户配置路径: import matplotlib 通过下面的语句可以获得目前使用的配置文件的路径: import matplotlib 由于在当前路径和用户配置路径中都没有找到位置文件,因此最后使用的是系统配置路径下的配置文件。如果你将一份到的当前目录下: import os 配置文件之后再运行 如果你用文本编辑器打开此配置文件的话,你会发现它实际上是定义了一个字典。为了对众多的配置进行区分,关键字可以用点分开。配置文件的读入可以使用 函数,
12、它返回一个配置字典 : 在 模块载入的时候会调用,并把得到的配置字典保存到 变量中: . 将使用 中的配置进行绘图。用户可以直接修改此字典中的 配置,所做的改变会反映到此后所绘制的图中。例如下面的所绘制的线将带有圆形的点标识符: import pylab 为了方便配置,可以使用 函数,下面的例子同时配置点标识符、线宽和颜色: 如果希望恢复到缺省的配置 载入时从配置文件读入的配置的话,可以 调用 函数。 如果手工修改了配置文件,希望重新从配置文件载入的配置的话,可以调用: 5.4 Artist 对象 包含有三 层:backend_bases.FigureCanvas 图表的绘制领域 backen
13、d_bases.Renderer 知道如何在 上如何 绘图 artist.Artist 知道如何使用 在 上绘图 和 需要处理底层的绘图操作,例如使用 在 界面上绘图,或者使用 绘制 。 则处理所 有的结构,例如处理图表、文字和曲线等的绘制和布局。通常只和 打交道,而不需要关心底层的绘制细节 。 分为简单类型和容器类型两种。简单类型的 为标准的绘图元件,例 如 、 、 、 等等。而容器类型则可以包含许多 简单类型的 ,使它们组织成一个整体,例如 、 、 等。直接使用 创建图表的标准流程如下 :创建 对象用 对象创建一个或者多个 或者 对象调用 等对象的方法创建各种简单类型的 下面首先调用 辅助
14、函数创建 对象,然后调用 对象的 方法在其中创建一个 对象, 的参数是一个形如 的列表,这些数值分别指定所创建的 对象相对于 的位置和大小,取值范围都在 到 之间: import matplotlib.pyplot as plt 然后调用 的 方法绘图,创建一条曲线,并且返回此曲线对象 。 是一个为包含 的所有曲线的列表,后续的 调用会往此列表中添 加新的曲线。如果想删除某条曲线的话,直接从此列表中删除即可。 对象还包括许多其它的 对象, 例如上的标题:可以通过调用 设置其 轴 如果查看 的源代码的话,会发现它是通过调用下面的语句实现的 : 下去,会发现 的 属性是一个 对 象:如果 的 属性
15、是一个 对 象: 而 对象的 属性 为设置的值: 这些对象都是 ,因此也可以调用它们的属性获取函数来获得相应的属性 : 5.4.1 Artist 的属性 图表中的每个元素都用一个 的 对象表示,而每个 对象都 有一大堆属性控制其显示效果。例如 对象和 对象都有 属性作为其背景,它的值是一个 对象。通过设置此它的一些属性可以修改 图表的背景颜色或者等属性,下面的例子将图表的背景颜色设置为绿色: 的 属性通过 函数进行设置,属性修改之后并不会立即反映到 图表的显示上,还需要调用函数才能够更新显示。下面是 对象都具有的一些属性 : ,值在 到 之间, 为完全透明, 为完全不透明 布尔值,在绘制动画效
16、果时使用 此 对象所在的 对象,可能为 对象的裁剪框 是否裁剪 裁剪的路径 判断指定点是否在对象上的函数 所在的 对象,可能为 文本 控制 对象选取 控制偏移旋转 是否可见 控制绘图顺序 对象的所有属性都通过相应的 和 函数进行读写,例如下面的语句 将 属性设置为当前值的一半: 如果你想用一条语句设置多个属性的话,可以使用 函数: 使用前面介绍的 函数可以方便地输出 对象的所有属 性名和值。 5.4.2 Figure 容器 现在知道如何观察和修改已知的某个Artist 对象的属性,接下来要解决如何找到指定的Artist 对象。前面介绍过Artist 对象有容器类型和简单类型两种,这一节让来详细
17、看看容器类型的内容。最大的Artist 容器是matplotlib.figure.Figure,它包括组成图表的所有元素。图表的背景是一个 Rectangle 对象,用Figure.patch 属性表示。当你通过调用add_subplot 或者 add_axes 方法往图表中添加轴(子图时),这些子图都将添加到Figure.axes 属性中,同时这两个方法也返回添加进axes 属性的对象,注意返回值的类型有所不同,实际上Axebplot 是Axes 的子类。 fig = plt . figure () ax1 = fig . add_subplot ( 211 ) ax2 = fig . ad
18、d_axes ( 0.1 , 0.1 , 0.7 , 0.3 ) ax1 ax2 fig . axes , 为了支持pylab 中的gca()等函数,Figure 对象保存有当前轴的信息,因此不建议直接对Figure.axes 属性进行列表操作,而应该使用add_subplot, add_axes, delaxes 等方法进行添加和删除操作。但是使用for 循环对axes 中的每个元素进行操作是没有问题的,下面的语句打开所有子图的栅格。 for ax in fig . axes : ax . grid ( True )Figure 对象可以拥有自己的文字、线条以及图像等简单类型的Artist。
19、缺省的坐标系统为像素点,但是可以通过设置Artist 对象的 transform 属性修改坐标系的转换方式。最常用的Figure 对象的坐标系是以左下角为坐标原点(0,0),右上角为坐标(1,1)。下面的程序创建并添加两条直线到fig 中: from matplotlib.lines import Line2D fig = plt . figure () line1 = Line2D ( 0 , 1 , 0 , 1 , transform = fig . transFigure , figure = fig , color = r ) line2 = Line2D ( 0 , 1 , 1 ,
20、0 , transform = fig . transFigure , figure = fig , color = g ) fig . lines . extend ( line1 , line2 ) fig . show ()图 5.4 在Figure 对象中手工绘制直线注意为了让所创建的 对象使用 的坐标 , 赋给 对象的 属性;为了让 对象知道它是在 对 象中,还设置其属性为;最后还需要将创建的两个 对象添加到 属性中 去。 对象有如下属性包含其它的 对象 : 对象列表 作为背景的 对象 对象列表,用 来显示 对象列表 对象列表 对象列表 对象列表,用来显示文字5.4.3 Axes 容
21、器 容器是整个 库的,它包含了组成图表的众多 对象,并且有 许多方法函数帮助创建、修改这些对象。和 一样,它有一个 属性作 为背坐标时, 属性是一个 对象,而当它是极坐标时,景,当它是属性则是 对象。例如下面的语句设置 对象的背景颜色为绿色 : 当你调用 的绘图方法(例如),它将创建一组 对象,并将所有的 关键字参数传递给这些 对象,并将它们添加进 属性中,最后返回所创建的 对象列表: 注意 返回的是一个 对象的列表,因 为绘制多条曲线。可以传递多组 轴的数据,一次与 方法类似,绘制直方图的方法 和绘制柱状统计图的方法 将创建一个 对象的列表,每个元素实际上都是 的子类 ,并且将所创建 的 对
22、象都添加进 属性中: 一般不会直接对Axes.lines 或者Axes.patches 属性进行操作,而是调用add_line 或者add_patch 等方法,这些方法帮助完成许多属性设置工作: fig = plt . figure () ax = fig . add_subplot ( 111 ) rect = matplotlib . patches . Rectangle ( 1 , 1 ),width = 5 , height = 12 ) prrect . get_axes () # rect 的 axes 属性为空 None rect . get_transform ()# rec
23、t 的 transform 属性为缺省值 BboxTransformTo(Bbox(array( 1., 1., 6., 13.) ax . add_patch( rect ) # 将 rect 添加进 ax rect . get_axes () # 于是0 x05C09CB0rect 的 axes 属性就是 ax # rect 的 transform 属性和 ax 的 transData 相同 rect . get_transform () . # 太长,省略 ax . transData . # 太长,省略 ax . get_xlim () # ax 的 X 轴范围为 0 到 1,无法显示
24、完整的 rect (0.0, 1.0) ax . dataLim . _get_bounds () # 数据的范围和 rect 的大小一致 (1.0, 1.0, 5.0, 12.0) ax . autoscale_view () # 自动调整坐标轴范围 ax . get_xlim () # 于是 X 轴可以完整显示 rect (1.0, 6.0) plt . show ()通过上面的例子可以看出,add_patch 方法帮助属性。设置了rect 的 axes 和 transform下面详细列出Axes 包含各种 Artist 对象的属性:artists : Artist 对象列表patch :
25、 作为Axes 背景的 Patch 对象,可以是 Rectangle 或者Circle collections : Collection 对象列表images : AxesImage 对象列表 legends : Legend 对象列表 lines : Line2D 对象列表 patches : Patch 对象列表 texts : Text 对象列表xaxis : XAxis 对象yaxis : YAxis 对象下面列出Axes 的创建Artist 对象的方法:Axes 的方法所创建的对象添加进的列表annoeAnnoetextsbarsRectanglepatcheserrorbarLin
26、e2D, Rectangle lines,patchesfillPolygonpatcheshistRectanglepatchesimshowAxesImageimageslegendLegendlegendsplotLine2DlinesscatterPolygonCollection CollectionstextTexttexts下面以绘制散列图(scatter)为例,验证一下: fig = plt . figure () ax = fig . add_subplot ( 111 ) t = ax . scatter ( np . random . rand ( 20 ), np .
27、random . rand ( 20 ) t # 返回值为 CircleCollection 对象 ax . collections # 返回的对象已经添加进了 collections 列表中 fig . show () t . get_sizes () # 获得图 5.5 用 函数绘制散列 图5.4.4 Axis 容器 容器包括坐标轴上的刻度线、刻度文本、坐标网格以及坐标轴标题等内容。刻度包括主刻度和副刻度,分别通过 和 方 法获得。每个刻度线都是一个 或者 对象,它包括实际的刻度线和刻度文本。为了方便访问刻度线和文本, 对象提供了 和 方法分别直接获得刻度线和刻度文本: # 获得刻度的位置
28、列表 # 获得刻度列表 for in # 获得刻度的文本字符串 # 获得主刻度线列表,图的上下刻度线共 10 条 # 获得副刻度线列表 获得刻度线或者刻度为红色并且旋转 度:之后,可以设置其各种属性,下面设置刻度线为绿色粗线,文本 for in . . . . for in . . . 最终的结果图如下:图 5.6 手工配置X 轴的刻度线和刻度文本的样式上面的例子中,获得的副刻度线列表为空,这是因为用于计算副刻度的对象缺省为NullLocator,它不产生任何刻度线;而计算主刻度的对象为 AutoLocator,它会根据当前的缩放等配置自动计算刻度的位置: axis . get_minor_l
29、ocator () # 计算副刻度的对象 axis . get_major_locator () # 计算主刻度的对象 可以使用程序为Axis 对象设置不同的Locator 对象,用来手工设置刻度的位置;设置Formatter 对象用来控制刻度文本的显示。下面的程序设置X 轴的主刻度为pi/4,副刻度为pi/20,并且主刻度上的文本以pi 为:# -*- coding: utf-8 -*- import matplotlib.pyplot as pl from matplotlib.ticker import MultipleLocator , FuncFormatter import numpy as np x = np . arange ( 0 , 4 * np . pi , 0.01 ) y = np . sin ( x ) pl . figure ( figsize =( 8 , 4 ) pl . plot ( x , y ) ax = pl . gca () def pi_formatter ( x ,): 比较罗嗦地将数值转换为以 pi/4 为的刻度文本 m = np . round ( x / ( np . pi / 4 ) n = 4 if m % 2 = 0 : m , n = m / 2 , n / 2 if m % 2 = 0 : m , n= m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 镀膜工岗前工作改进考核试卷含答案
- 锻造工诚信品质模拟考核试卷含答案
- 汽车机械维修工道德强化考核试卷含答案
- 四年级数学下册第三单元第二课时《小数点搬家》教学设计
- 2026年Python爬虫Scrapy框架实战与反爬虫策略
- 2025年招商推介会策划
- 2025年辽宁省公需课学习-主体功能区战略与制度
- 2026年大学大四(软件工程)软件项目管理综合测试试题及答案
- 2026年大学大四(农业工程与信息技术)农业物联网技术综合测评试题及答案
- 2026年定点医疗机构医保工作人员培训试题及答案解析
- 麻精药品信息化管理系统需求说明
- 钟点工协议书范本2篇
- 个人信息保护培训课件
- 《水工钢结构》试题及答案1783
- 实习协议书电子电子版(2篇)
- 工业机器人维护与保养PPT全套完整课件
- GA/T 2002-2022多道心理测试通用技术规程
- 片区更新改造总体规划项目建议书
- GB/T 10870-2001容积式和离心式冷水(热泵)机组性能试验方法
- 青岛版科学(2017)六三制六年级下册全册课件
- HR第2章 人力资源战略与规划课件
评论
0/150
提交评论