Графические данные в прямом эфире из файла CSV - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь отобразить данные в реальном времени (или выглядеть динамически), используя animate из файла CSV, в который я записываю данные о получении данных по TCP от инструмента.

Вот мой код:

def animate(i):
  xs = []
  ys = []
  with open('C:/Users/aeros/Desktop/flashDump.csv') as graph_data:
    for line in graph_data:
        if not line.strip():
            continue
        if len(line) > 1:
            line.split(" ")
            x, y = line.split(',')
            xs.append(x)
            ys.append(y)
ax1.clear()
ax1.plot(xs, ys)

А потом я вызываю это в моем графическом интерфейсе tkinter

    ani = animation.FuncAnimation(fig, animate, interval = 1000)
    plt.show()

Вот как обычно выглядит мой CSV-файл, когда я записываю в него данные.

enter image description here

Очевидно, что файл не анализируется правильно, потому что он не находится в первом столбце, и между данными есть пробел, и при использовании animate я получаю ошибку x, y слишком много значений для распаковки.

Благодарим вас за помощь в правильном разборе файла и построении графиков в реальном времени.

1 Ответ

0 голосов
/ 29 августа 2018

Я полагаю, что ваша проблема лежит здесь:

if len(line) > 1:
    line.split(" ")
    x, y = line.split(',') # specifically this line.
    xs.append(x)
    ys.append(y)

x, y = split(',') может сработать, если вы работаете только с одной запятой в строке, потому что вы создадите список из 2 индексов, и каждый из них назначит x и y, но что-то большее не будет работать здесь.

Обновление:

Вот лучший вариант для работы с форматом вашего CSV.

Сначала нам нужно rstrip() строку. Что это будет делать, это удалить \n с линии. Это поможет позже.

Далее нам нужно сделать split(","), чтобы создать наш список. Этот список будет иметь 3 индексных пункта. Первое значение из столбца B - пустая строка из столбца C и второй столбец значения из формы D. Затем вы можете назначить индекс каждому другому списку.

def animate():
    xs = []
    ys = []
    with open('flashDump.csv') as graph_data:
        for line in graph_data:
            rstriped = line.rstrip()
            if len(rstriped) > 1:
                line_list = rstriped.split(",")
                xs.append(line_list[0])
                ys.append(line_list[2])
                print(xs, ys)

animate()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...