python - Python matplotlib / 用线连接图
问题描述
我有一个工具可以打开 Twitter 的 API 流并根据他们的情绪分析推文。其逻辑存储在一个类中。我正在使用全局变量来存储类生成的值(所有整数)。随着推文的处理,它们会不断更新。
from tweepy.streaming import StreamListener
from textblob import TextBlob
from tweepy import Stream
from tweepy import OAuthHandler
import matplotlib.pyplot as plt
import re, json, time, datetime
import numpy as np
import tweepy
count = 0
class listener(StreamListener):
def on_data(self, data):
....(logic for processing data)....
global count
count = count + 1
我使用 matplotlib 每隔 X 秒绘制一次聚合值。为了做到这一点,我是:
- 在我的子类之外使用 while 循环来调用全局变量
- 将全局变量中的值绘制到图表中
- 将全局变量重置为其原始值 (0)
- 每X秒重复一次
我每隔 X 秒将聚合数据绘制到图表的解决方案:
plt.ion() # for an interactive chart
read_frequency = 5 # how frequent we plot values to chart (seconds)
while True:
time.sleep(read_frequency)
now = datetime.datetime.now().isoformat()
# prints aggregated data to terminal
print(f'{now} Total: {count}')
x = now
y = count
plt.plot(x, y, color = 'black', marker = 'o')
plt.show()
plt.pause(0.0001)
# Reset aggregate data in global variables
count = 0
我现在遇到的问题是,因为我重置了全局变量,我的 ydata,所以图之间没有关系。因此,我得到的不是线型图表,而是带有单独图的图表。
为了在它们之间画一条线,我如何强制地块之间建立关系?
解决方案
如果不保留聚合数据,则需要从图形本身获取数据。所以你可以得到最后一条 (x,y) 绘制的线
line = plt.gca().get_lines()[-1]
xd = line.get_xdata()
yd = line.get_ydata()
xd
然后使用 and 中的最后一个值和yd
您的新值绘制一条新线
x0, y0 = xd[-1], yd[-1]
plt.plot([x0, x], [y0, y], color = 'black', marker = 'o')
推荐阅读
- firebase - 我们可以在 Firebase 函数中使用布尔值作为环境变量吗
- rust - 在 Rust 中使用 HashMap 代替指针
- javascript - 代码重构,网格布局组件VueJS
- kubernetes - 在 minkube 上带有 nginx 入口控制器的 Metallb 不断为入口重置外部 IP
- ado.net - 使用 ADO.NET / Npgsql 的超时 + 准备好的事务
- javascript - 动态添加对象到对象
- spring - 2个不同的读者在同一步骤中填写一个项目
- sql - SQL - 在两个表上查找唯一值
- firebase - React native - 即使输入的凭据正确,firebase 身份验证也不起作用
- python - 使用 pandas 数据框修改 csv 中的数据