Python matplotlib / соединительные участки с линией - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть инструмент, который открывает поток для API Twitter и анализирует твиты на основе их настроений.Логика для этого хранится внутри класса.Я использую глобальные переменные для хранения значений, сгенерированных классом (все целые числа).Они постоянно обновляются по мере обработки твитов.

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, между графиками нет никакой связи.Таким образом, вместо диаграммы стиля линии, я получаю диаграмму с отдельными графиками.

Мой текущий график

Как я могу навязать отношения между графиками с целью нарисовать линию между ними?

1 Ответ

0 голосов
/ 04 декабря 2018

Вам необходимо получить данные из самой фигуры, если вы не сохраняете агрегированные данные.Таким образом, вы можете получить последнюю (x, y) построенную линию с помощью

line = plt.gca().get_lines()[-1]
xd = line.get_xdata()
yd = line.get_ydata()

, а затем построить новую линию, используя последнее значение из xd и yd и ваши новые значения

x0, y0 = xd[-1], yd[-1]
plt.plot([x0, x], [y0, y], color = 'black', marker = 'o')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...