用Matplotlib繪制二維圖像


嘮叨幾句:

近期在做數據分析,需要對數據做可視化處理,也就是畫圖,一般是用Matlib來做,但Matlib安裝文件太大,不太想直接用它,據說其代碼運行效率也很低,在網上看到可以先用Java做數據處理,然后調用Matlib來畫圖,另外,還可以使用Matplotlib,它是用Python寫的類似Matlib的庫,能實現Matlib的功能,而且畫圖的質量很高,可用於做論文發表。找了一天的資料,終於出圖了。

Matplotlib需要配合numpy,scipy才能使用,具體安裝步驟稍后補充。

安裝Python之后,在cmd中輸入以下兩行命令即可自動安裝matplotlib,並解決庫之間的依賴問題。
python -m pip install -U pip setuptools  #安裝pip
python -m pip install matplotlib  #用pip安裝matplotlib

 matplotlib安裝方法參考:http://matplotlib.org/users/installing.html

 

正文:

用Matplotlib繪制二維圖像的最簡單方法是:

1)導入matplotlib的子模塊

import matplotlib.pyplot as plt

2)給出x,y兩個數組[Python列表],注意兩個列表的元素個數必須相同,否則會報錯

x=[1,2,3,4,5,6,7]
y=[2.6,3.6,8.3,56,12.7,8.9,5.3]

3)調用pyplot模塊的繪圖方法畫出圖像,基本的畫圖方法有:plot(將各個點連成曲線圖)、scatter(畫散點圖),還有更多方法

plt.plot(x,y)
plt.scatter(x,y)

 

4)調用pyplot的show方法,顯示結果。

plt.show()

 

基本代碼:

import matplotlib.pyplot as plt
def plot2D():
    x=[1,2,3,4,5,6,7]
    y=[2.6,3.6,8.3,56,12.7,8.9,5.3]
    plt.plot(x,y)#畫連線圖
    plt.scatter(x,y)#畫散點圖
    plt.show()
    
if __name__=='__main__':
    plot2D()

 

結果圖:

依次是:僅調用plot方法、僅調用scatter方法、同時調用plot和scatter方法

 

下面給出一個綜合示例

本例用Python讀取.txt文件中的數據內容(舊金山的出租車位置信息,引自http://crawdad.org/epfl/mobility/20090224/),作為繪制圖像的數據源,調用Matplotlib模塊的pyplot子模塊畫出圖像。圖像類型包括散點圖、曲線圖,包含圖例說明、title、坐標軸說明

代碼:

# -*- coding: gbk -*-

import re
import matplotlib.pyplot as plt

def loadData(dataFile,rowlimts):
    #dataFile=r'E:\cabspottingdata\new_abboip.txt'
    myFile=open(dataFile,'r',2048)#2048為緩沖大小
    newline=myFile.readline()
    geopoints=[]
    splitter=re.compile('\\s')#以空白字符作為分隔符
    rows=0
    while newline and rows<rowlimts:
        content=splitter.split(newline)
        geopoint=[]
        geopoint.append(float(content[1]))
        geopoint.append(float(content[0]))
        geopoints.append(geopoint)
        rows+=1
        newline=myFile.readline()
    myFile.close()
    return geopoints

def main():
    rowlimits=25000#讀取數據的行數
    dataFile=r'E:\cabspottingdata\new_abboip.txt'
    dataFile2=r'E:\cabspottingdata\new_utvohovy.txt'
    dataFile3=r'E:\cabspottingdata\new_uvjova.txt'
    geopoints=loadData(dataFile,rowlimits)
    geopoints2=loadData(dataFile2,rowlimits)
    geopoints3=loadData(dataFile3,rowlimits)
    x=[]
    y=[]
    x2=[]
    y2=[]
    x3=[]
    y3=[]
    for point in geopoints:
        x.append(point[0])
        y.append(point[1])
    for point in geopoints2:
        x2.append(point[0])
        y2.append(point[1])
    for point in geopoints3:
        x3.append(point[0])
        y3.append(point[1])
    plt.plot(x,y,color='green',label='cab 1')#繪制綠色線條,label要起作用,必須與legend()方法配合使用
    plt.scatter(x2,y2,color='green',label='cab 2')#用x2,y2列表繪制綠色散點圖,圖例為cab 2
    plt.plot(x3,y3,color='red',label='cab 3',linewidth=1)#用x3,y3列表繪制紅色線條,圖例為cab 3,線條粗細設為1
   
  
 
    #plt.scatter(x2,y2,color='g',label='line one',linewidths=1)
    #plt.plot(x, y, 'b^', x2, y2, 'g-')
    plt.legend()
    plt.grid(None, 'major', 'both')#畫出網格背景
    plt.title('Plotting the trajectory of cabs in San Fransisco with %d spatial records'%rowlimits)#設置title
    plt.xlabel('longitude')#說明x軸表示經度
    plt.ylabel('latitude')#說明y軸表示緯度
    plt.show()#顯示結果圖
    
if __name__=='__main__':
    main()
    

一些效果圖:

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM