from matplotlib import pyplot as plt
import matplotlib.animation as animation
import datetime as dt
import matplotlib
import time
import socket
# 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定一个本地信息
localaddr = ("192.168.137.1",8888) # 必须绑定自己电脑IP和port
udp_socket.bind(localaddr)
data = []
matplotlib.rcParams['font.family'] = 'FangSong'
fig = plt.figure(num = '气体温度压强测量', figsize=(12, 6), dpi = 100)
ax1 = fig.add_subplot(1, 1, 1)
ax1.yaxis.set_tick_params(labelcolor='b')
ax1.yaxis.set_tick_params(color='b')
ax2 = ax1.twinx()
ax2.yaxis.set_tick_params(labelcolor='r')
ax2.yaxis.set_tick_params(color='r')
xs = []
ys1 = []
ys2 = []
def animate(i, xs, ys1,ys2):
recv_data = udp_socket.recvfrom(1024)
recv_msg = recv_data[0]
send_addr = recv_data[1]
data = recv_msg.decode("gbk").split(":")
press = int(eval(data[0]))
temp = int(eval(data[1]))
xs.append(dt.datetime.now().strftime('%H:%M:%S'))
ys1.append(press)
ys2.append(temp)
xs = xs[-20:]
ys1 = ys1[-20:]
ys2 = ys2[-20:]
ax1.clear()
ax2.clear()
ax1.set_ylabel('气压P/×100Pa', color = 'b', size = 15)
ax1.set_ylim(300,1600)
ax1.tick_params('x', labelrotation=45)
ax2.set_ylabel('热力学温度T/K', color = 'r', size = 15)
ax2.set_ylim(270,380)
ax1.plot(xs, ys1, 'b.-')
ax2.plot(xs, ys2, 'r.:')
plt.title('测量气体压强、温度', size = 20)
for a, b, c in zip(xs, ys1, ys2):
ax1.text(a, b, b, ha='center', va='bottom', color = 'b', fontsize=15, alpha = 0.5)
ax2.text(a, c, c, ha='center', va='bottom', color = 'r', fontsize=15, alpha = 0.5)
ani = animation.FuncAnimation(fig, animate, fargs=(xs, ys1,ys2), interval=1000)
plt.show()
udp_socket.close()