python+matplotlib實現動態繪製圖片執行個體代碼(互動式繪圖),

來源:互聯網
上載者:User

python+matplotlib實現動態繪製圖片執行個體代碼(互動式繪圖),

本文研究的主要是python+matplotlib實現動態繪製圖片(互動式繪圖)的相關內容,具體介紹和實現代碼如下所示。

  最近在研究動態障礙物避障演算法,在Python語言進行演算法模擬時需要即時顯示障礙物和運動物的當前位置和軌跡,利用Anaconda的Python打包集合,在Spyder中使用Python3.5語言和matplotlib實現路徑的動態顯示和互動式繪圖(和Matlab功能類似)。

  Anaconda是一個用於科學計算的Python發行版,支援 Linux, Mac, Windows系統,提供了包管理與環境管理的功能,可以很方便地解決多版本python並存、切換以及各種第三方包安裝問題。Anaconda利用工具/命令conda來進行package和environment的管理,並且已經包含了Python和相關的配套工具。Anaconda官方地址:https://www.continuum.io/downloads/

  matplotlib 是python最著名的繪圖庫,它提供了一整套和matlab相似的命令API,十分適合互動式地進行製圖。而且也可以方便地將它作為繪圖控制項,嵌入GUI應用程式中。其中,matplotlib的pyplot子庫提供了和matlab類似的繪圖API,方便使用者快速繪製2D圖表,它的文檔相當完備,並且 Gallery頁面中有上百幅縮圖,開啟之後都有來源程式。matplotlib官方地址:http://matplotlib.org/

  在調研matplotlib動態繪製曲線方法中,和matlab相似有animation方法和互動式繪圖,但是animation方法靈活性不高,不太適合路徑的即時動態顯示,本文最後採用互動式繪圖模(interactive mode)。具體參見http://matplotlib.org/users/shell.html。

  The interactive property of the pyplot interface controls whether a figure canvas is drawn on every pyplot command. If interactive is False, then the figure state is updated on every plot command, but will only be drawn on explicit calls to draw(). When interactive is True, then every pyplot command triggers a draw.

  當繪圖語句中加入pl.ion()時,表示開啟了互動模式。此時python解譯器解釋完所有命令後,給你出張圖,但不會結束會話,而是等著你跟他交流交流。如果你繼續往代碼中加入語句,run之後,你會即時看到圖形的改變。當繪圖語句中加入pl.ioff()時或不添加pl.ion()時,表示打關了互動模式。此時要在代碼末尾加入pl.show()才能顯示圖片。python解譯器解釋完所有命令後,給你出張圖,同時結束會話。如果你繼續往代碼中加入語句,再不會起作用,除非你關閉當前圖片,重新run。

  採用互動式繪圖模式後,可以方便地繪出障礙物的運動軌跡和當前位置,深切感覺matplotlib和matlab很類似,基本matlab的功能都可以在matplotlib中找到,所以matlab中的代碼也可以很快移植到python中!

程式碼範例:

# -*- coding: utf-8 -*-"""Created on Sat Mar 25 23:28:29 2017@author: wyl"""import matplotlib.pyplot as pltfrom matplotlib.patches import Circleimport numpy as npimport math  plt.close() #clf() # 清圖 cla() # 清座標軸 close() # 關視窗fig=plt.figure()ax=fig.add_subplot(1,1,1)ax.axis("equal") #設定映像顯示的時候XY軸比例plt.grid(True) #添加網格plt.ion() #interactive mode onIniObsX=0000IniObsY=4000IniObsAngle=135IniObsSpeed=10*math.sqrt(2)  #米/秒print('開始模擬')try:  for t in range(180):    #障礙物船隻軌跡    obsX=IniObsX+IniObsSpeed*math.sin(IniObsAngle/180*math.pi)*t    obsY=IniObsY+IniObsSpeed*math.cos(IniObsAngle/180*math.pi)*t    ax.scatter(obsX,obsY,c='b',marker='.') #散佈圖    #ax.lines.pop(1) 刪除軌跡    #下面的圖,兩船的距離    plt.pause(0.001)except Exception as err:  print(err)

示範結果:

總結

以上就是本文關於python+matplotlib實現動態繪製圖片執行個體代碼(互動式繪圖)的全部內容,希望對大家有所協助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.