您的位置:首页 > 编程语言 > PHP开发

py科学绘图库matplotlib详细教程

2015-08-30 08:16 691 查看

前言

Matplotlib是一个可以绘制2D数据图形的python库,利用它可以绘制出各种各样的数据图表。

安装

linux or mac

命令行键入

sudo pip install matplotlib


win

要管理员权限

pip install matplotlib


推荐下载Anaconda,一个python的拓展包,包含了195个关于科学,数学,工程,数据分析的py库,安装一个就可以解决大部分库安装的问题。里面还包括了IPython和Spyder。

运行环境

这一节可以跳过

既然是绘图库,肯定有图片,可是命令行大部分不支持显示图片,所以要用到外部扩展命令行或程序。

下面说四种方法来显示图片:

1.保存成图片,用图片浏览器打开

这个方法在调试时最不好用,不过在批量生成图片时,可以批量保存用。

savefig
函数,这个以后细说。

2.用matplotlib自带的图片预览器

它自带了一个图片查看器,如果当前命令行不支持图片展示的话,会自动启动这个预览器。

缺点就是每一次都要手动关闭

3.用IPython显示图片

Ipython是一个python命令行扩展。提供一个交互环境,来调试py程序,基本上就像Mathematical一样,重点是它支持直接在命令行里显示图片,就像这样:



4.Spyder

Spyder是一个python的IDE,主要用来做科学计算的,界面类似于MATLAB,直接上图:



正文

废话扯完了,开始正文了。

基本绘图

这一节来画最简单的这个:



分析:

上图是由一条正弦曲线和余弦曲线组成,所以要获取曲线数据才能绘制。

代码:

# -*- coding: utf-8 -*-
#载入pylab
from pylab import *
#用numpy生成X轴数据
X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
#用numpy根据numpy生成sin,cos数据
C,S = np.cos(X), np.sin(X)

#根据数据绘制
plot(X,C)
plot(X,S)

#显示图片,如果在命令行模式,会弹出图片预览窗口,
#IPython下,直接在命令行展示图片
show()


本文是用python2.7。

pylab提供了一个针对matplotlib面向对象绘图库的程序界面。它模仿Matlab(TM)开发。

运行

无视这一小节

打开ipython,直接复制粘贴上面的代码,按回车,就可以看到图片了,如果提示找不到库,用
sudo pip install +对应包名
就可以了,如果还不行,去问度娘。

打开Spyder新建项目,在项目里新建一个py文件,将代码复制粘贴进去,在编辑器的右方或下方的控制台部分,选择
IPython console
,按F5运行,就可以在IPython console里看到图片了。

Numpy

Numpy是一个用来科学计算的库,为Python提供了任意维数的数组对象(ndarray,n-dimensional array object)还有通用函数对象(ufunc,universal function object)。

Python中提供了list容器,可以当作数组使用。但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简单的列表[1,2,3]。就需要三个指针和三个整数对象。对于数值运算来说,这种结构显然不够高效。

Python虽然也提供了array模块,但其只支持一维数组,不支持多维数组,也没有各种运算函数。因而不适合数值运算。

而NumPy的出现弥补了这些不足。(——摘自张若愚的《Python科学计算》)

上面绘制正余弦函数图像时,就用到了numpy来生成数据,
C,S = np.cos(X), np.sin(X)
,这时,C、S就是numpy数组对象。

我们要绘图,就得把数据转换成数组对象

numpy数组简单教程

点击每一个函数名,可直接跳转到文档

数组里每一个数据的类型都相同

由实际所持有的数据和描述这些数据的元数据(metadata)组成

生成数组

np.arange()
等同于py的range函数,不过返回是numpy数组

np.array(list)
接受一个对象(list,map,etc.),转换成numpy数组

*
np.linspace(start,stop,num=50)
返回从start到stop的num个间隔数字组成的数组

数组方法

array.tolist()
返回py的list

未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息