Python图表绘制:matplotlib绘图库入门

matplotlib 简介

matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。

它的文档相当完备,并且Gallery页面中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定。

在Linux下比较著名的数据图工具还有gnuplot,这个是免费的,Python有一个包可以调用gnuplot,但是语法比较不习惯,而且画图质量不高。

而 Matplotlib则比较强:Matlab的语法、python语言、latex的画图质量(还可以使用内嵌的latex引擎绘制的数学公式)。

快速绘图面向对象方式绘图

matplotlib实际上是一套面向对象的绘图库,它所绘制的图表中的每个绘图元素,例如线条Line2D、文字Text、刻度等在内存中都有一个对象与之对应。

为了方便快速绘图matplotlib通过pyplot模块提供了一套和MATLAB类似的绘图API,将众多绘图对象所构成的复杂结构隐藏在这套API内部。我们只需要调用pyplot模块所提供的函数就可以实现快速绘图以及设置图表的各种细节。pyplot模块虽然用法简单,但不适合在较大的应用程序中使用。

为了将面向对象的绘图库包装成只使用函数的调用接口,pyplot模块的内部保存了当前图表以及当前子图等信息。当前的图表和子图可以使用plt.gcf()和plt.gca()获得,分别表示"Get Current Figure"和"Get Current Axes"。在pyplot模块中,许多函数都是对当前的Figure或Axes对象进行处理,比如说:

plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。

可以在Ipython中输入类似"plt.plot??"的命令查看pyplot模块的函数是如何对各种绘图对象进行包装的。

配置属性

matplotlib所绘制的图表的每个组成部分都和一个对象对应,我们可以通过调用这些对象的属性设置方法set_*()或者pyplot模块的属性设置函数setp()设置它们的属性值。

因为matplotlib实际上是一套面向对象的绘图库,因此也可以直接获取对象的属性

配置文件

绘制一幅图需要对许多对象的属性进行配置,例如颜色、字体、线型等等。我们在绘图时,并没有逐一对这些属性进行配置,许多都直接采用了matplotlib的缺省配置。

matplotlib将这些缺省配置保存在一个名为“matplotlibrc”的配置文件中,通过修改配置文件,我们可以修改图表的缺省样式。配置文件的读入可以使用rc_params(),它返回一个配置字典;在matplotlib模块载入时会调用rc_params(),并把得到的配置字典保存到rcParams变量中;matplotlib将使用rcParams字典中的配置进行绘图;用户可以直接修改此字典中的配置,所做的改变会反映到此后创建的绘图元素。

绘制多子图(快速绘图)

Matplotlib 里的常用类的包含关系为 Figure -> Axes -> (Line2D, Text, etc.)一个Figure对象可以包含多个子图(Axes),在matplotlib中用Axes对象表示一个绘图区域,可以理解为子图。

可以使用subplot()快速绘制包含多个子图的图表,它的调用形式如下:

subplot(numRows, numCols, plotNum)

subplot将整个绘图区域等分为numRows行* numCols列个子区域,然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1。如果numRows,numCols和plotNum这三个数都小于10的话,可以把它们缩写为一个整数,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的区域中创建一个轴对象。如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除。

subplot()返回它所创建的Axes对象,我们可以将它用变量保存起来,然后用sca()交替让它们成为当前Axes对象,并调用plot()在其中绘图。

绘制多图表(快速绘图)

如果需要同时绘制多幅图表,可以给figure()传递一个整数参数指定Figure对象的序号,如果序号所指定的Figure对象已经存在,将不创建新的对象,而只是让它成为当前的Figure对象。

import numpy as np
import matplotlib.pyplot as plt plt.figure(1)#创建图表1
plt.figure(2)#创建图表2
ax1=plt.subplot(211)#在图表2中创建子图1
ax2=plt.subplot(212)#在图表2中创建子图2 x=np.linspace(0,3,100)
foriinxrange(5):
plt.figure(1)#选择图表1
plt.plot(x,np.exp(i*x/3))
plt.sca(ax1)#选择图表2的子图1
plt.plot(x,np.sin(i*x))
plt.sca(ax2)#选择图表2的子图2
plt.plot(x,np.cos(i*x))
plt.show()

在图表中显示中文和负号

matplotlib的缺省配置文件中所使用的字体无法正确显示中文。为了让图表能正确显示中文,可以有几种解决方案。

  1. 在程序中直接指定字体。
  2. 在程序开头修改配置字典rcParams。
  3. 修改配置文件。
  4. mpl.rcParams['font.sans-serif'] = ['SimHei']

面向对象画图

matplotlib API包含有三层,Artist层处理所有的高层结构,例如处理图表、文字和曲线等的绘制和布局。通常我们只和Artist打交道,而不需要关心底层的绘制细节。

直接使用Artists创建图表的标准流程如下:

  • 创建Figure对象
  • 用Figure对象创建一个或者多个Axes或者Subplot对象
  • 调用Axies等对象的方法创建各种简单类型的Artists
import matplotlib.pyplot as plt

X1=range(0,50)
Y1=[num**2fornuminX1]#y=x^2
X2=[0,1]
Y2=[0,1]#y=x Fig=plt.figure(figsize=(8,4))#Createa`figure'instance
Ax=Fig.add_subplot(111)#Createa`axes'instanceinthefigure
Ax.plot(X1,Y1,X2,Y2)#CreateaLine2Dinstanceintheaxes Fig.show()
Fig.savefig("test.pdf")

参考:

《Python科学计算》(Numpy视频) matplotlib-绘制精美的图表(快速绘图)(面向对象绘图)(深入浅出适合系统学习)

什么是 Matplotlib (主要讲面向对象绘图,对于新手可能有点乱)

Matplotlib.pylab快速绘图

import pylab as pl

安装numpy和matplotlib

>>> import numpy
>>> numpy.version
>>> import matplotlib
>>> matplotlib.version

两种常用图类型**:Line and scatter plots(使用plot()命令), histogram(使用hist()命令)

折线图&散点图

Line and scatter plots

折线图

(关联一组x和y值的直线)

import numpy as np
import pylab as pl x = [1, 2, 3, 4, 5]# Make an array of x values
y = [1, 4, 9, 16, 25]# Make an array of y values for each x value pl.plot(x, y)# use pylab to plot x and y
pl.show()# show the plot on the screen

散点图

把pl.plot(x, y)改成pl.plot(x, y, 'o')即可

美化

线条颜色

有三种表示颜色的方式

最新文章

  1. 机器学习 k-临近算法
  2. SSH+JPA查询两个数据库
  3. PHP 调用Python脚本
  4. EasyUI DataGrid单选如何取消选中
  5. JAVA包命名规范
  6. docker registry 搭建
  7. CSS代码写出的各种形状图形
  8. zk leader选举自动完成
  9. hdu 5090 Game with Pearls
  10. ansible role 执行顺序
  11. ajax成功案例
  12. git基本命令--status, add, diff, commit, log
  13. 重启mysql提示:The server quit without updating PID file问题的解决办法
  14. vector作为参数的三种传参方式
  15. 设计模式学习之“观察者模式” [C#]
  16. python模块-OS模块详解
  17. 英语口语练习系列-C15-心情不好
  18. linux上下载安装mysql,并使用
  19. AspNetCore2 Hangfire定时任务
  20. BZOJ.1468.Tree(点分治)

热门文章

  1. Windows 7 系统下显示文件类型的扩展名和隐藏文件
  2. jmeter压测实践
  3. 如何从git上批量拉取本地当前分支的所有代码
  4. Nginx作为静态资源web服务之防盗链
  5. 百度编辑神器ueditor在ajax或form提交内容时候异常
  6. 分布式消息中间件之kafka设计思想及基本介绍(一)
  7. Binlog_master
  8. python文件操作:文件处理案例
  9. API开发之接口安全(一)----生成sign
  10. Beta冲刺版本第一天