我正在尝试绘制通过TCP通过仪器输入的数据值对。 我可以成功接收这些值并将其打印到我的UI,但是似乎无法弄清楚如何在接收到这些值时动态地绘制它们。我已经使用了几个图形库和动画,但是主要的问题似乎是过滤掉字符串标签和不需要的字符,因此我只能绘制接收到的浮点值。
这是我的代码:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#s.settimeout(10)
s.connect((TCP_IP, TCP_PORT))
s.sendall(MESSAGE)
#s.shutdown(socket.SHUT_WR)
s.setblocking(0) # set port to nonblocking
begin=time.time()
while(1):
if loop == 15:
text1.insert(END, "Stopped Recieving Continious Data... Press SEND to continue recieving data \n")
text1.insert(END, " To Stop Continious Transimisson, SEND *** 0")
text1.see("end")
break;
if logData and time.time()-begin > timeout:
#print("in if 1")
break
elif time.time()-begin > timeout*2:
#print("in if 2")
break
try:
logData = s.recv(BUFFER_SIZE).strip('\t\r\n')
f.write(logData)
f.write('\n')
if logData:
udpData(logData) #prints to UI
print(repr(logData))
begin=time.time()
loop = loop + 1
else:
time.sleep(0.1)
except:
pass
# perform filtering of strings here or within while loop try?
# x = logData
#plt.plot(x, color = 'red', marker = 'o', linestyle = 'dashed', linewidth = 2)
#plt.show()
通过在用户界面中按下发送消息按钮可激活此功能,并成功接收数据并打印并写入文件。当我发送一条命令给我这样的一对值时,我将如何解释数据和绘图:
CCT 1
Conc1: 1004.5 Conc2: 3003.2
Conc1: 567.4 Conc2: 4034.2
... ...
在Conc1 :、值和Conc2之后,似乎还有一个\ t字符。
感谢您的任何输入或帮助:)
也已经编写了使用文本文件数据的绘图功能,但是字符串在上面的文件中,并且我的动画函数无法正确解析它们,但是主要问题是这样做,因为我释放数据而不是从文本文件中释放数据写给。 :
def animate(i):
xs = []
ys = []
with open("C:\\Users\\aeros\\Desktop\\output6.txt") as graph_data:
for line in graph_data:
x, y = line.split(" ")
xs.append(x)
ys.append(y)
ax1.clear()
ax1.plot(xs, ys)
答案 0 :(得分:0)
由于您不会向我们展示完整的示例,因此我所能做的就是向您展示我身边有一个示例,希望您可以适应它。
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import requests
URL = 'https://poloniex.com/public?command=returnTicker'
def poloapi():
"""get a single datapoint
replace this with your code that returns a single datapoint"""
data = requests.get(URL).json()
return float(data['ETH_BCH']['highestBid'])
def animate(i):
ydata.append(poloapi())
line.set_data(range(len(ydata)), ydata)
plt.ylim(min(ydata), max(ydata))
plt.xlim(0, len(ydata))
return line,
ydata = [poloapi()]
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
line, = ax1.plot(ydata, marker='o', markersize=10, markerfacecolor='green')
ani = animation.FuncAnimation(fig, animate, interval=30000)
plt.show()