我希望我的剧情能够实时更新。它从函数获取列表,功能嵌入其中,列表随着时间不断变长。因此,绘图必须在某个点处停止,并且不能使bean无限循环。此外,整个类都循环运行。
这是经过数天的研究和编程后得出的代码,但不幸的是我无法显示出代码。
class LiveGraph():
def __init__(self):
fig = plt.figure()
self.ax1 = fig.add_subplot(1,1,1)
self.xar=[]
self.yar=[]
self.h1=self.ax1.plot(self.xar, self.yar)[0]
def update_plot(self):
graph_data=open("twitter-out.txt", "r")
graph_data=list(graph_data)
graph_data=graph_data[0].split(",")
x=0
y=0
for l in graph_data:
x+=1
try:
y=float(l)
except BaseException as e:
pass
self.xar.append(x)
self.yar.append(y)
self.h1.set_xdata(self.xar)
self.h1.set_ydata(self.yar)
plt.draw()
我希望在其他代码继续在后台运行的同时显示情节。
从获取鸣叫的循环中调用代码:
class StdOutListener(StreamListener):
def on_data(self,data):
try:
all_data = json.loads(data)
text=all_data["text"]
temp_text=TextBlob(text)
analysis=temp_text.sentiment.polarity
output = open("twitter-out.txt","a")
output.write(str(analysis))
output.write(",")
output.close()
print("sucsess")
live_graph=LiveGraph()
live_graph.update_plot()
return True
except BaseException as e:
print('Failed: ', str(e))
此循环是tweepy库的一部分,每次收到一条tweet都会触发该循环。
答案 0 :(得分:0)
matplotlib有一个interactive mode,因此您可以将绘图过程与其他代码分开:
import matplotlib.pyplot as plt
plt.ion()
plt.plot([1,2,3]) # plots show here
# other stuff
或者您可以致电plt.show(block=False)
。来自doc:
在非交互模式下,显示所有图形并阻止直到图形被关闭;在交互模式下,除非在非交互模式更改为交互模式之前创建图形(不推荐),否则它不会起作用。在这种情况下,它会显示数字,但不会阻塞。
单个实验关键字参数block可以设置为True或False,以覆盖上述阻止行为。
根据您的情况,您可以将最后一行更改为show(block=False)
。