繁体   English   中英

Python Matplotlib /用线连接图

[英]Python matplotlib / connecting plots with line

我有一个工具可以打开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秒绘制一次汇总值。 为此,我是:

  1. 在子类外部使用while循环调用全局变量
  2. 将全局值绘制到图表上
  3. 将全局变量重置为其原始值(0)
  4. 每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()

然后使用xdyd的最后一个值以及您的新值绘制一条新线

x0, y0 = xd[-1], yd[-1]
plt.plot([x0, x], [y0, y], color = 'black', marker = 'o')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM