Python 之 Python與MATLAB 作圖小結__Python

來源:互聯網
上載者:User

一、一般概念

圖形系統就是用來實現所謂的可視化的。在學習具體的命令之前,先瞭解一個可視化的圖形具有哪些特徵,以及這些特徵具有什麼關係。有了一個宏觀的瞭解之後,記住幾個核心的命令,等遇到具體問題時候查詢相關文檔或者查看類似圖形別人的代碼即可。就以我們在紙上作圖作為比擬:

首先,我們需要一張白紙。這張白紙,就是一個所謂的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努力讓容易的事情繼續容易,讓難的事情盡量容易。”

網址(http://matplotlib.sourceforge.net/gallery.html)給出了各種常見的和一些不常見的圖形執行個體,都有源碼。在使用的時候,看到自己需要的圖形,找到源碼,填入自己的資料以及解說文字,一個漂亮的圖就產生了。另外,對於3D作圖,儘管matplotlib本身不提供,但是強有力的add-ons已經加入,完全可以勝任常規3D作圖。

初級使用者建議使用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])
ylim([-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.grid('on')    #以上語句不難理解

 

##這種方式的優勢和不同在以下語句體現。因為控制代碼的引入,讓我們更加的物件導向,思路也更加清晰。代碼的

##可讀性也更高了。

plt.setp(line1,lw=2,c='g')    #通過setp函數,設定控制代碼為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()

效果如圖:


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.