如何使⽤Python作图(相⽐于MATLAB)
科学计算:Python VS. MATLAB(4)----图形系统简介
⼀、⼀般概念
图形系统就是⽤来实现所谓的可视化的。在学习具体的命令之前,先了解⼀个可视化的图形具有哪些特征,以及这些特征具有什么关系。有了⼀个宏观的了解之后,记住⼏个核⼼的命令,等遇到具体问题时候查询相关⽂档或者查看类似图形别⼈的代码即可。就以我们在纸上作图作为⽐拟:
⾸先,我们需要⼀张⽩纸。这张⽩纸,就是⼀个所谓的figure。我们可以给这个figure取⼀个名字,写在这张纸的正中间。如果这是⼀系列纸中的⼀张,可能还会给它⼀个标号,⽐如第1页、第2页。
然后,我们在这张纸上确定把图画在什么位置,即确定坐标轴(axes)这⼀张纸有⼏个坐标轴?坐标轴的刻度范围?线性的还是对数的?是⽅形的?双侧坐标轴的?等等。在画线区域,还可以考虑加⽹格。
下⾯,我们可以在已有的坐标中画上我们需要的功能曲线了,也就是由⼀个个点连成的线。连线的⽅式有很多选择,⽐如直⾓坐标系、极坐标、饼状图、箭头图等。对于这些点或者线,我们可以控制它的风格:⽐如颜⾊、⽐如宽度等等。
最后,要给图线添加⼀些说明⽂字,⽐如坐标轴的物理意义、图中曲线、符号的图例、这个图整体的标题、图中某些点的含义等等。
⼆、MATLAB的实现
以⼀个简单的例⼦,⼤致给出MATLAB绘图的⼀般⽅法。
t1=0:0.1:4
t2=0:0.05:4    %准备⼀些数据
figure()    %准备那张⽩纸
subplot(211)    %⼦图绘图
plot(t1,sin(2*pi*t1),'--g*')    %线形、颜⾊、点的表⽰法
title('sine function demo')    %标题⽂字
xlabel('time(s)')
ylabel('votage(mV)')    %XY轴的⽂字
xlim([0.0,5.0])
ylim([-1.2,1.2])    %XY轴的区间范围
grid on    %加⽹格
subplot(212)
plot(t2,exp(-t2),':r')
hold on  %保持上⼀条线
plot(t2,cos(2*pi*t2),'--b')
xlabel('time')
ylabel('amplitude')
效果如图:
三、Python的实现
实现上⾯相同的例⼦。
Python⽤来绘图的⼯具包是matplotlib。翻译⼀段matplotlib主页上的话:“matplotlib是⼀个Python 2D绘图库,提供多种可跨平台的硬拷贝格式的出版质量的图形及交互环境。”、“matplotlib努⼒让容易的事情继续容易,让难的事情尽量容易。”
初级⽤户建议使⽤pylab模式,pylab中包括了matplotlib.pyplot的所有绘图命令,以及numpy和matplotlib.mlab中的函数,在这个模式下,和MATLAB的绘图命令和套路⼏乎是完全⼀样的;⾼级⽤户建议使⽤matplotlib,可以进⾏更多的细节控制。
⽅式⼀:
from pylab import *    #引⼊兼容MATLAB包:pylab
t1=arange(0.0,4.0,0.1)
t2=arange(0.0,4.0,0.05)    #准备⼀些数据,注意和MATLAB的不同
figure()
subplot(211)
plot(t1,sin(2*pi*t1),'--g*')
title('sine function demo')
xlabel('time(s)')
ylabel('votage(mV)')
xlim([0.0,5.0])
matplotlib中subplotylim([-1.2,1.2])
grid('on')    #控制⽹格显⽰和grid(True)效果⼀样。不带参数的grid()起到toggle的作⽤。
subplot(212)
plot(t2,exp(-t2),':r')
hold('on')    #前⼀条线保持。⽤法和grid类似。
plot(t2,cos(2*pi*t2),'--b')
xlabel('time')
ylabel('amplitude')
show()    #这是和MATLAB很⼤的不同,这个命令⽤完,图形才会出来。
效果如图:
⽅式⼆:
import matplotlib.pyplot as plt
import numpy as np    #导⼊包
t1=np.arange(0.0,4.0,0.1)
t2=np.arange(0.0,4.0,0.05)    #准备⼀些数据
fig = plt.figure()    #准备好这张纸,并把句柄传给fig
ax1 = fig.add_subplot(211)    #使⽤句柄fig添加⼀个⼦图
line1, = plt.plot(t1,np.sin(2*np.pi*t1),'--*')  #绘图,将句柄返给line1
plt.title('sine function demo')
plt.xlabel('time(s)')
plt.ylabel('votage(mV)')
plt.xlim([0.0,5.0])
plt.ylim([-1.2,1.2])
##这种⽅式的优势和不同在以下语句体现。因为句柄的引⼊,让我们更加的⾯向对象,思路也更加清晰。代码的##可读性也更⾼了。
plt.setp(line1,lw=2,c='g')    #通过setp函数,设置句柄为line1的线的属性,c是color的简写
line1.set_antialiased(False)    #通过line1句柄的set_*属性设置line1的属性
<(4,0,'$\mu=100,\\sigma=15$')    #添加text,注意,它能接受LaTeX哟!
ax2=fig.add_subplot(212)
plt.plot(p(-t2),':r')
plt.hold('on')
plt.plot(s(2*np.pi*t2),'--b')
plt.xlabel('time')
plt.ylabel('amplitude')
plt.show()
效果如图:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。