Python动态图

来自:

https://www.cnblogs.com/DHUtoBUAA/p/6619099.html

matplotlib python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。其中,matplotlibpyplot子库提供了和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

  采用交互式绘图模式后,可以方便地绘出障碍物的运动轨迹和当前位置,深切感觉matplotlibmatlab很类似,基本matlab的功能都可以在matplotlib中找到,所以matlab中的代码也可以很快移植到python中!

-------------------------------------源程序1-----------------------------------------

# -*- 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 on

IniObsX=0000

IniObsY=4000

IniObsAngle=135

IniObsSpeed=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)

-------------------------------------源程序2,实时显示盈亏-----------------------------------------

#coding=gbk

'''

Created on Fri July 6 2018

@author: lyq

'''

import http.client

from threading import Timer

import time

import json

import sys

import chardet

import urllib.request

from html.parser import HTMLParser

import datetime

import pandas as pd

from matplotlib.ticker import MultipleLocator, FormatStrFormatter

import matplotlib.pyplot as plt

from matplotlib.patches import Circle

import numpy as np

import 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 on

IniObsX=0000

IniObsY=4000

IniObsAngle=135

IniObsSpeed=10*math.sqrt(2)   #/

print('开始仿真')

try:

for t in range(180):

#取当前时间

now_time = datetime.datetime.now()

time1 = now_time.strftime('%H:%M:%S')

obsX=time1

r = urllib.request.urlopen("http://hq.sinajs.cn/list=s_sz000063") #2422

aa = r.read()

a=aa.decode('GB2312')

#print(a)

denghao = '='

nPos = a.index(denghao)

sNo = a[nPos-6:nPos]

print('code:'+sNo)

astr = a[nPos+1:].split(',')

#print (astr[0])

print (astr[1])

print ( "%.2f" % (18700*(eval(astr[1])-13.008)) )

#obsY=eval(astr[1]) #价格图

obsY=("%.2f" % (18700*(eval(astr[1])-13.008)))

plt.xticks(rotation=25)

if(t<=20 ) :

xmajorLocator   = MultipleLocator(1) #x主刻度标签设置为1的倍数

elif(t>20 and t<100 ) :

xmajorLocator   = MultipleLocator(5) #x主刻度标签设置为5的倍数

else:

xmajorLocator   = MultipleLocator(20) #x主刻度标签设置为20的倍数

ax.xaxis.set_major_locator(xmajorLocator)

#ax.xaxis.set_major_formatter(xmajorFormatter)

ax.scatter(obsX,obsY,c='b',marker='.')  #散点图

#下面的图,price

plt.pause(1)

except Exception as err:

print(err)

猜你喜欢

转载自blog.csdn.net/lyq_csdn/article/details/80951149