我希望实时显示来自StdOutListener的输出。问题是,twitter流本身是一个循环,无法连续终止以更新图形,因此我必须以某种方式停止matplotlib函数。我尝试过plt.show(block=False)
。
我用plt.show(block=False)
进行了尝试,但这导致多个matplotlib窗口打开。我尝试停止并启动matplotlib loob,但这似乎没有任何效果。
当前,我在每次传入推文之后执行live_Graph类,因为它似乎是连接两个循环的唯一选择。
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("\n")
output.close()
print("sucsess")
live_graph=LiveGraph()
plt=live_graph.analyze_data()
return True
except BaseException as e:
print('Failed: ', str(e))
class LiveGraph():
def animate(i):
graph_data=open("twitter-out.txt", "r").read()
lines=graph_data.split("\n")
xar=[]
yar=[]
x=0
y=0
for l in lines:
print(l)
x+=1
try:
y=float(l)
print(y)
except BaseException as e:
pass
xar.append(x)
yar.append(y)
#xs = graph_data.index.tolist()
#ys = graph_data["Sentiment"].tolist()
ax1.clear()
ax1.plot(xar, yar)
ani = animation.FuncAnimation(fig, animate, interval=3000)
plt.show()
因此,我希望图形在获取推文的同一文件中进行更新。我的问题是,我仍然对python还是很陌生,由于它的复杂性,分叉似乎不是一个选择。