Python — Matplotlib库的使用

Matplotlib库的使用

  要点:matplotlib是提供数据绘图功能的第三方库,其pyplot子库主要用于实现各种数据展示图形的绘制。

1. matplotlib.pyplot库概述

  matplotlib.pyplot是matplotlib的子库,引用方式如下:

>>>import matplotlib.pyplot as plt

  为了正确显示中文字体,请用以下代码更改默认设置,其中’SimHei’表示黑体字。

>>>import matplotlib
>>>matplotlib.rcParams['font.family']='SimHei'
>>>matplotlib.rcParams['font.sans-serif']_=['SimHei']

  常见字体名称的中英文对照

字体英文表示 字体名称
SimSun 宋体
SimHei 黑体
KaiTi 楷体
Microsoft YaHei 微软雅黑
LiSu 隶书
FangSong 仿宋
YouYuan 幼圆
STSong 华文宋体
STHeiti 华文黑体
Apple LiGothic Medium 苹果丽中黑

  matplotlib库由一系列有组织有隶属关系的对象构成,这对于基础绘图操作来说显得过于复杂。因此,matplotib提供了一套快捷命令式的绘图接口函数,即pyplot子模块。pyplot 将绘图所需要的对象构建过程封装在函数中,对用户提供了更加友好的接口。pyplot模块提供一批预定义的绘图函数,大多数函数可以从函数名辨别它的功能。

2. matplotlib.pyplot库解析

  使用plt代替matplotlib.pyplot。plt子库提供了一批操作和绘图函数,每个函数代表对图像进行的一个操作,比如创建绘图区域、添加标注或者修改坐标轴等
  plt子库中包含了4个与绘图区域有关的函数。

函数 描述
plt.figure(figsize=None, facecolor=None) 创建一个全局绘图区域
plt.axes(rect,axisbg=‘w’) 创建一个坐标系风格的子绘图区域
plt.subplot(nrows, ncols,plot_number) 在全局绘图区域中创建一个子绘图区域
plt.subplots_adjust() 调整子绘图区域的布局

  使用figureO函数创建一个全局绘图区域,并且使它成为当前的绘图对象,figsize
  参数可以指定绘图区域的宽度和高度,单位为英寸。鉴于figure(O函数参数较多,这里采用指定参数名称的方式输入参数。

>>> plt.figure(figsize=(8,4))

  绘制图像之前也可不调用figureO函数创建全局绘图区域,此时,plt子库会自动创建一个默认的绘图区域。显示绘图区域的代码如下:

>>>plt.figure(figsize=(8,4))
>>>plt.show()

  subplot()用于在全局绘图区域内创建子绘图区域,其参数表示将全局绘图区域分成nrows行和ncols列,并根据先行后列的计数方式在plot_number位置生成一个坐标系,实例代码如下,3个参数关系如图9.3所示。其中,全局绘图区域被分割成3×2的网格,其中,在第4个位置绘制了一个坐标系。

>>>plt.subplot(324)
>>>plt.show()

效果如下:

axes()默认创建一个subplot(111)坐标系,参数rec=[left,bottom,width,height]中4个变量的范围都为[0,1],表示坐标系与全局绘图区域的关系;axisbg指背景色,默认为white。
  subplotO函数的参数关系

>>> plt.axes([0.1,0.1,0.7,0.3],axisbg='y')
>>>>> plt.show()

  plt子库提供了一组读取和显示相关的函数,用于在绘图区域中增加显示内容及读入数据,这些函数需要与其他函数搭配使用。
  plt库的读取和显示函数(共6个)

函数 描述
plt.legend() 在绘图区域中放置绘图标签(也称图注)
plt.show() 显示创建的绘图对象
plt.matshow() 在窗口显示数组矩阵
plt.imshow() 在axes 上显示图像
plt.imsave() 保存数组为图像文件
plt.imread() 从图像文件中读取数组

  pyplot模块提供了17个用于绘制“基础图表”的常用函数。

描述 操作
plt.polt(x, y, label, color, width) 根据x、y数组绘制直、曲线
plt.boxplot(data, notch, position) 绘制一个箱型图(Box-plot)
plt.bar(left, height, width, bottom) 绘制一个条形图
plt.barh(bottom, width,height, left) 绘制一个横向条形图
plt.polar(theta, r) 绘制极坐标图
plt.pie(data,explode) 绘制饼图
plt.psd(x, NFFT=256, pad_to, Fs) 绘制功率谱密度图
plt.specgram(x, NFFT=256,pad_to, F) 绘制谱图
plt.cohere (x, y, NFFT=256, Fs) 绘制X-Y的相关性函数
plt.scatter() 绘制散点图(x、y是长度相同的序列)
plt.step(x, y, where) 绘制步阶图
plt.hist(x,bins,normed) 绘制直方图
plt.contour(X,Y,Z,N) 绘制等值线
plt.vlines() 绘制垂直线
plt.stem(x,y,linefmt,markerfmt,basefmt) 绘制曲线每个点到水平轴线的垂线
plt.plot_date() 绘制数据日期
plt.plotfile() 绘制数据后写入文件

  plot()函数是用于绘制直线的最基础的函数,调用方式很灵活,x和y可以是numpy计算出的数组,并用关键字参数指定各种属性。其中,label表示设置标签并在图例(legend)中显示,color表示曲线的颜色,linewidth表示曲线的宽度。在字符串前后添加“$”符号,matplotlib会使用其内置的latex引擎绘制数学公式。
  【例1】绘制基本的三角函数。
  在坐标系中绘制基本的三角函数,代码如下,绘制效果如图9.4所示。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 6, 100)
y = np.cos(2 * np.pi * x) * np.exp(-x)+0.8
plt.plot(x, y, 'k', color='y', linewidth=5, linestyle="-")
plt.show()

效果如下:

  plt库有两个坐标体系:图像坐标和数据坐标。图像坐标将图像所在区域左下角视为原点,将x方向和y方向长度设定为1。整体绘图区域有一个图像坐标,每个axes()和 subplot()函数产生的子图也有属于自己的图像坐标。axes()函数参数 rect 指当前产生的子区域相对于整个绘图区域的图像坐标。数据坐标以当前绘图区域的坐标轴为参考,显示每个数据点的相对位置,这与坐标系里面标记数据点一致。
  下表给出了与plt库的坐标轴设置相关的函数。

函数 描述
plt.axis(‘v’,'off,‘equal’,‘scaled’,‘tight’,‘image’) 获取设置轴属性的快捷方法
plt.xlim(xmin, xmax) 设置当前x轴取值范围
plt.ylim(ymin,ymax) 设置当前y轴取值范围
plt.xscale() 设置x轴缩放
plt.yscale() 设置y轴缩放
plt.autoscale() 自动缩放轴视图的数据
plt.text(x,y,s,fontdic,withdash) 为axes图轴添加注释
plt.thetagrids(angles,labels, fmt, frac) 设置极坐标网格theta的位置
plt.grid(on/off) 打开或者关闭坐标网格
>>>plt.plot([1,2,6],[1,2,1])
>>>>plt.axis()#获得当前坐标轴范围
(1.0,4.0,1.0,3.0)
>>>plt.axis([0,5,0,8]) #4个变量分别是[xmin,xmax,ymin,ymax]
>>>plt.show()#请读者观察输出结果

  下表给出了13个设置坐标系标签的相关函数。

函数 描述
plt.figlegend(handles,label,loc) 为全局绘图区域放置图注
plt.legend() 为当前坐标图放置图注
plt.xlabel(s) 设置当前x轴的标签
plt.ylabel(s) 设置当前y轴的标签
plt.xticks(array,‘a’,‘b’,‘c’) 设置当前x轴刻度位置的标签和值
plt.yticks(array,‘a’,‘b’,‘c’) 设置当前y轴刻度位置的标签和值
plt.clabel(cs,v) 为等值线图设置标签
plt.get_figlabels() 返回当前绘图区域的标签列表
plt.figtext(x, y, s, fontdic) 为全局绘图区域添加文字
plt.title() 设置标题
plt.suptitle() 为当前绘图区域添加中心标题
plt.text(x, y, s,fontdic, withdash) 为 坐标图轴添加注释
plt.annotate(note, xy, xytext, xycoords, textcoords, arrowprops) 用箭头在指定数据点创建一个注释或一段文本

  【例2】绘制一个带标签的坐标系,代码如下,绘制效果如下图所示。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.family'] = 'SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
plt.plot([1, 2, 6], [1, 2, 1])
plt.title("坐标系")
plt.xlabel('时间()')
plt.ylabel('范围(m)')
plt.xticks([1,2,3,4,5],[r'$\pi/3$',r'$2\pi/3$',r'$\pi/$',r'$4\pi/3$',r'$5\pi/3$'])
plt.show()

效果如下:

  plt库提供了3个区域填充函数,对绘图区域填充颜色。

函数 描述
fill(x,y,c,color) 填充多边形
fill_between(x, y1, y2, where, color) 填充两条曲线围成的多边形
fill_betweenx(y, x1, x2, where, hold) 填充两条水平线之间的区域

  【例3】带局部阴影的坐标系。
  绘制一个带局部阴影的坐标系,代码如下,绘制效果如图9.6所示。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 1000)
y = np.cos(2*np.pi*x) * np.exp(-x)+0.8
plt.plot(x, y, 'k', color='y', label="$exp-decay$", linewidth=3)
plt.axis([0, 6, 0, 1.8])
ix = (x>0.8) & (x<3)
plt.fill_between(x, y, 0, where = ix,
                         facecolor = 'grey', alpha=0.25)
plt.text(0.5*(0.8+3), 0.2, r"$\int_a^b f(x)\mathrm{d}x$",
                horizontalalignment='center')
plt.legend()
plt.show()

效果如下:

来源:衍生星球

物联沃分享整理
物联沃-IOTWORD物联网 » Python — Matplotlib库的使用

发表评论