科学计算:Python VS. MATLAB(4)----图形系统简介
科學計算:Python VS. MATLAB(4)----圖形系統(tǒng)簡介
一、一般概念
圖形系統(tǒng)就是用來實現(xiàn)所謂的可視化的。在學習具體的命令之前,先了解一個可視化的圖形具有哪些特征,以及這些特征具有什么關系。有了一個宏觀的了解之后,記住幾個核心的命令,等遇到具體問題時候查詢相關文檔或者查看類似圖形別人的代碼即可。就以我們在紙上作圖作為比擬:
首先,我們需要一張白紙。這張白紙,就是一個所謂的figure。我們可以給這個figure取一個名字,寫在這張紙的正中間。如果這是一系列紙中的一張,可能還會給它一個標號,比如第1頁、第2頁。
然后,我們在這張紙上確定把圖畫在什么位置,即確定坐標軸(axes)這一張紙有幾個坐標軸?坐標軸的刻度范圍?線性的還是對數(shù)的?是方形的?雙側坐標軸的?等等。在畫線區(qū)域,還可以考慮加網(wǎng)格。
下面,我們可以在已有的坐標中畫上我們需要的功能曲線了,也就是由一個個點連成的線。連線的方式有很多選擇,比如直角坐標系、極坐標、餅狀圖、箭頭圖等。對于這些點或者線,我們可以控制它的風格:比如顏色、比如寬度等等。
最后,要給圖線添加一些說明文字,比如坐標軸的物理意義、圖中曲線、符號的圖例、這個圖整體的標題、圖中某些點的含義等等。
二、MATLAB的實現(xiàn)
以一個簡單的例子,大致給出MATLAB繪圖的一般方法。
t1=0:0.1:4
t2=0:0.05:4????%準備一些數(shù)據(jù)
?
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軸的區(qū)間范圍
grid on????%加網(wǎng)格
?
subplot(212)
plot(t2,exp(-t2),':r')
hold on???%保持上一條線
plot(t2,cos(2*pi*t2),'--b')
xlabel('time')
ylabel('amplitude')
效果如圖:
三、Python的實現(xiàn)
實現(xiàn)上面相同的例子。
Python用來繪圖的工具包是matplotlib。翻譯一段matplotlib主頁上的話:“matplotlib是一個Python 2D繪圖庫,提供多種可跨平臺的硬拷貝格式的出版質(zhì)量的圖形及交互環(huán)境?!?、“matplotlib努力讓容易的事情繼續(xù)容易,讓難的事情盡量容易?!?/span>
網(wǎng)址(http://matplotlib.sourceforge.net/gallery.html)給出了各種常見的和一些不常見的圖形實例,都有源碼。在使用的時候,看到自己需要的圖形,找到源碼,填入自己的數(shù)據(jù)以及說明文字,一個漂亮的圖就產(chǎn)生了!另外,對于3D作圖,盡管matplotlib本身不提供,但是強有力的add-ons已經(jīng)加入,完全可以勝任常規(guī)3D作圖。
初級用戶建議使用pylab模式,pylab中包括了matplotlib.pyplot的所有繪圖命令,以及numpy和matplotlib.mlab中的函數(shù),在這個模式下,和MATLAB的繪圖命令和套路幾乎是完全一樣的;高級用戶建議使用matplotlib,可以進行更多的細節(jié)控制。
方式一:
from pylab import *????#引入兼容MATLAB包:pylab
t1=arange(0.0,4.0,0.1)
t2=arange(0.0,4.0,0.05)????#準備一些數(shù)據(jù),注意和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])
ylim([-1.2,1.2])???
grid('on')????#控制網(wǎng)格顯示和grid(True)效果一樣。不帶參數(shù)的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)?????#準備一些數(shù)據(jù)
?
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.grid('on')????#以上語句不難理解
?
##這種方式的優(yōu)勢和不同在以下語句體現(xiàn)。因為句柄的引入,讓我們更加的面向?qū)ο?#xff0c;思路也更加清晰。代碼的
##可讀性也更高了。
plt.setp(line1,lw=2,c='g')????#通過setp函數(shù),設置句柄為line1的線的屬性,c是color的簡寫
line1.set_antialiased(False)????#通過line1句柄的set_*屬性設置line1的屬性
plt.text(4,0,'$\mu=100,\\sigma=15$')????#添加text,注意,它能接受LaTeX喲!
?
ax2=fig.add_subplot(212)
plt.plot(t2,np.exp(-t2),':r')
plt.hold('on')?
plt.plot(t2,np.cos(2*np.pi*t2),'--b')
plt.xlabel('time')
plt.ylabel('amplitude')
plt.show()
效果如圖:
?
================update 20121229=================
關于python科學計算,隆重推薦sage math,sage的特點和用法,在本博客較新博文中有介紹
總結
以上是生活随笔為你收集整理的科学计算:Python VS. MATLAB(4)----图形系统简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDE (Integrated Deve
- 下一篇: 吴恩达机器学习笔记五之神经网络