pythonmatlabplot画表格_matplotlib-绘制精美图表
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()显⽰出我们创建的所有绘图对象。
使⽤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)")
matplotlib中subploty = [s(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的官⽅教程:
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 就是翻转的⾓度
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论