现在的位置: 首页 > 综合 > 正文

matplotlib-绘制精美图表

2013年10月15日 ⁄ 综合 ⁄ 共 4393字 ⁄ 字号 评论关闭

matplotlib-绘制精美图表
matplotlib是一个在python下实现的类matlib的纯python的三方库,旨在用python实现matlab的功能,是python下最出色的会图库,功能很完善,风格跟matlib很相似。

我们画图的目的是将函数以图片的形式展示出来,所以需要关注两个方面的东西:1.函数 2.图片 函数方面使用的是numpy这个库,其中包括了很多科学计算的功能。

1.matplotlib中的快速绘图的函数库可以通过如下语句载入:
import matplotlib.pyplot as plt

2.接下来调用figure创建一个绘图对象,并且使它成为当前的绘图对象。
 

plt.figure(figsize=(8,4))
通过figsize参数可以指定绘图对象的宽度和高度,单位为英寸;dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80。因此本例中所创建的图表窗口的宽度为8*80 = 640像素。

3.通过调用plot函数在当前的绘图对象中进行绘图:
 

plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,z,"b--",label="$cos(x^2)$")

 *x,y均为成员数量相同的数组
 •label : 给所绘制的曲线一个名字,此名字在图示(legend)中显示。只要在字符串前后添加"$"符号,matplotlib就会使用其内嵌的latex引擎绘制的数学公式。
 •color : 指定曲线的颜色
 •linewidth : 指定曲线的宽度

plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("PyPlot First Example")
plt.ylim(-1.2,1.2)
plt.legend()
 •xlabel : 设置X轴的文字
 •ylabel : 设置Y轴的文字
 •title : 设置图表的标题
 •ylim : 设置Y轴的范围
 •legend : 显示图示

4.最后调用plt.show()显示出我们创建的所有绘图对象。

 

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://flyfeeling.blogbus.com/logs/53148228.html

matplotlib是python中一个用于画图的一个包,在matplotlib的主页上是这么介绍的:matplotlib is a python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms. 目前matplotlib的最新版本是0.99.1,可以进入他的官网进行下载:http://matplotlib.sourceforge.net/

使用matplotlib来画图已经很长时间了,零零碎碎的也积攒了很多小tips,但是一直没怎么整理,在这个帖子里,我准备将平时所用到的小tips做一个小结,在以后也会不定期的进行更新。

首先介绍一下matplotlib中最常用的一个子模块,pyplot。这个包中包含常用的绘制二维曲线的方法,也是实际中应用最多的一个字包。因此通常我们用matplotlib绘图的时候首先需要引入这个包,即

import matplotlib.pyplot as plt

下面介绍二维图中的常用的几个概念

figure:定义一个图片

fig = plt.figure()

axes:定义图片中的一块绘图区域,在实际作图中,通常使用下面的方法

ax = fig.add_subplot(111)  

可以将图片划分为几个绘图区域,括号中的三个数字分别表示将图片划分为几行、 几列,以及选取第几个绘图区域,因此,如下的语句表示,将图片划分为2行2列,供4个区域,ax是其中的第三个区域,注意在这里是按照行来数的,即图片的左下角的区域。

ax = fig.add_subplot(223)

括号中的数字也可以用逗号隔开,即

ax = fig.add_subplot(2,2,3)

axis:表示绘图区域的一个坐标轴,有x轴和y轴之分,分别可以通过以下方法取得

xaxis = ax.xaxis

yaxis = ax.yaxis

以上的三个概念是绘图中使用最多,大部分操作也是在其中完成的。

下面介绍一些经常使用到的一些操作。

1. 画二维曲线图

x = arange(0,5,0.1)

y = [math.sin(a) for a in x]

ax.plot(x,y,"ro-")

图片结果如图1所示,双引号里面的三个字符分别表示曲线颜色,点的形状,线的形状。也可以用以下的方式显示指定:

ax.plot(x,y,color='r',linestyle='-',marker='o')

color的取值可以参见表1,或者使用RGB的值,即color=(1,0,0)。

linestyle与marker的取值可以参见表2,默认的线形为'-',点形为'o'。如果只想表示散点图,可以使用

ax.plot(x,y,"ro")

或者

ax.plot(x,y,color='r',linestyle='',marker='o')

                   图1                                                         表1

                                                           表2

在实际中,我们可能经常会用到对数坐标轴,这时可以用下面的三个函数来实现

ax.semilogx(x,y)           #x轴为对数坐标轴

ax.semilogy(x,y)           #y轴为对数坐标轴

ax.loglog(x,y)              #双对数坐标轴

2. 图形标注

这个命令很简单,如果在plot语句中使用了label属性,那么使用legend语句即可自动在图片中添加一个标注框,如下:

x = arange(0,5,0.1)

y = [math.sin(a) for a in x]

ax.plot(x,y,"ro-",label = "sin(x)")

y = [math.cos(a) for a in x]

ax.plot(x,y,"bx-",label = "cos(x)")

ax.legend()

程序运行结果如图2所示。

当然我们可以指定legend的位置,如下:

ax.legend(loc='lower left')

或者

ax.legend(loc=3)

location的可选参数见表3.

                           图2                                                                      表3

3. 坐标轴的标题

在图2中,我们使用下面语句来定义坐标轴标题

ax.set_xlabel("x")
ax.set_ylabel("sin(x),cos(x)")

4. 数学公式编辑

图2中的图形标签与坐标轴的标题都是用常规字体来显示的,那么很多时候我们希望它们显示成数学公式的样子,或者有时候直接就需要编辑一个数学公式,里面可能包括一些拉丁字母或者数学符号等,这时候我们需要借助用:LaTex。

LaTex是一款排版软件,是编辑论文的常用工具,也可以处理日常生活中的各种文档,如写信、写书、画表格,甚至做幻灯片。它和word的主要区别在于:word是“所见即所得”,而LaTex是“所想即所得”。在LaTex里编辑公式是依靠一系列命令生成的。

当然在这里,我不准备将篇幅全部用于LaTex上面,感兴趣的朋友可以自己google学习之。在matplotlib里面,也可以使用LaTex的命令来编辑公式,只需要在字符串前面加一个“r”即可,这里给大家看一个简单的例子。

x = arange(1,1000,1)
r = -2
c = 5
y = [5*(a**r) for a in x]
ax.loglog(x,y,label = r"$y = c*x^{\gamma}, c=5,\gamma=-2$")
ax.legend()
ax.set_xlabel(r"x")
ax.set_ylabel(r"y")

程序执行结果如图3所示,这实际上是一个power-law的例子,有兴趣的朋友可以继续google之。

                              图3

关于LaTex的更多命令,可以参见matplotlib的官方教程:

http://matplotlib.sourceforge.net/users/mathtext.html#mathtext-tutorial

5. 控制坐标轴的显示

前面所有的例子的坐标轴的所有显示(如最大值,最小值,间隔大小,显示方式等等)都是使用的默认生成方式,而实际上,我们也可以用几句命令很方便的进行修改。下面用例子来说明吧:

x = arange(0,5,0.1)

y = [10*math.sin(a) for a in x]

ax.plot(x,y,"ro-",label = "sin(x)")

ax.set_xlim(1,4)                            # 设定x轴范围

ax.set_ylim(-8.5,11)                      # 设定y轴范围

ax.set_xticks(range(1,4.1,0.5))       # 设定x轴的标签

ax.set_yticks(range(-8,11,2))         # 设定y轴的标签

程序运行结果如图4所示,而如果你希望你的坐标轴上的标签显示的不是数字,而是一些设定好的文字,当然也可以:

ax.set_xticklabels(list("abcdefg"))     # 设定x轴的标签文字

显示结果如图5所示

                             图4                                                                        图5

通过set_xticks与set_xticklabels的结合,我们就可以任意变换我们想要的x轴标签的显示形式了,记住,set_xticks是设定标签的实际数字,而set_xticklabels则是设定我们希望他显示的结果。

补充:

       1.label翻转的实现,在输出到页面之前,使用:fig.autofmt_xdate() 或者 ax.set_xticklabels(group_labels, rotation=120)    rotation就是翻转的角度
 

抱歉!评论已关闭.