Python -- Matplotlib库的使用

Posted 衍生星球

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)\\mathrmdx$",
                horizontalalignment='center')
plt.legend()
plt.show()

效果如下:

Python基础——matplotlib库的使用与绘图可视化

1、matplotlib库简介:

    Matplotlib 是一个 Python 的 2D绘图库,开发者可以便捷地生成绘图,直方图,功率谱,条形图,散点图等。

2、Matplotlib 库使用:

  注:由于深度学习实践中常常会使用绘图,主要包括生成绘图、散点图,实践中也主要关注此点。

  运行环境:Python3

(1)生成绘图

import numpy as np               # 导入NumPy库
import matplotlib.pyplot as plt  # 导入绘图库
import matplotlib
if __name__ == "__main__":
    #simkai.ttf 是电脑控制面板里字体的一种,这里是楷体
    chinese =matplotlib.font_manager.FontProperties(fname=\'C:\\Windows\\Fonts\\simkai.ttf\')
    x1 = np.arange(-5.0, 5.0, 0.02)
    y1 = np.sin(x1)
    x2 = np.arange(-5.0, 5.0, 0.02)
    y2 = np.cos(x2)
    plt.figure(1)                                       #作图1
    plt.subplot(211)                                    #作子图
    plt.plot(x1, y1, \'r\',label=u\'正弦信号\',linewidth=3)  #作出x1和y1图,依次设置颜色、标签名称、线性大小
    plt.legend(prop=chinese)                            #支持中文
    plt.axis([-2.5, 2.5, -1, 1])                        #设置x、y轴范围
    plt.subplot(212)                                    #作子图
    plt.plot(x2, y2, \'go\',label=u\'余弦信号\',linewidth=1) #作出x2和y2图,依次设置颜色、标签名称
    plt.legend(prop=chinese)                            #支持中文
    plt.axis([-2.5, 2.5, -1, 1])                        #设置x、y轴范围
    plt.show()                                          #显示作图结果

(2)散点图

    注:data.txt 文件下载

           链接:https://pan.baidu.com/s/1GQDuBKaHVyxGcEVvaVafAA
           提取码:6cxo

import numpy as np
import matplotlib.pyplot as plt
if __name__ == "__main__":
    myDat = np.loadtxt(\'data.txt\') #加载数据文件,数据间的分隔符为空格
    xMat = np.mat(myDat)[:,0]
    yMat = np.mat(myDat)[:,1]
    plt.figure()                   #作图
    #作原始数据散点图
    plt.scatter(xMat[:,0].flatten().A[0],yMat[:,0].flatten().A[0],color = \'r\',label=\'data\',marker = \'o\') #依次设置散点的颜色、形状
    plt.legend(loc=\'lower right\')  #指定标签位置
    plt.show()                     #显示作图结果

参考文献

[1] https://blog.csdn.net/u014453898/article/details/73395522

以上是关于Python -- Matplotlib库的使用的主要内容,如果未能解决你的问题,请参考以下文章

Python 之 Numpy库以及Matplotlib库的学习

Python 之 Numpy库以及Matplotlib库的学习

Panda和numpy库和matplotlib库的安装

matplotlib库的五个优点和缺点

matplotlib库的常用知识

Python 及其第三方库的版本查看