123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- import signal
- import sys
- from matplotlib import pyplot as plt
- import asyncio
- import os
- import time
- file_data = {}
- axes = {}
- labels = {}
- def tryParseInt(value):
- if value is None or value == "":
- return value, False
- try:
- return int(value), True
- except ValueError:
- return value, False
- def tryParseIntList(list):
- new_vars = []
- for i in list:
- y, success = tryParseInt(i)
- if not success:
- new_vars = None
- break
- new_vars.append(y)
- return new_vars
- async def follow(path):
- with open(path, "r") as f:
- labels[path] = f.readline().split("\t")
- while True:
- line = f.readline()
- if not line:
- # print("nothing new")
- await asyncio.sleep(0.1)
- continue
- yield line
- print("returned follow")
- def init_plt(paths):
- plt.ion()
- fig = plt.figure()
- nrows = 1
- ncolumns = 1
- index = 1
- while nrows * ncolumns < len(paths):
- nrows += 1
- if nrows * ncolumns >= len(paths):
- break
- ncolumns += 1
- for key in paths:
- axes[key] = fig.add_subplot(nrows, ncolumns, index)
- index += 1
- plt.subplots_adjust(hspace=0.5)
- return fig
- def get_files():
- return ["plots/{}".format(p) for p in [f for f in os.listdir("plots") if f.endswith(".tsv")]]
- async def read_file_data(path):
- print(f"reading data for {path}")
- lines = follow(path)
- xs = []
- ys = []
- async for line in lines:
- line_data = line.split("\t")
- x, success = tryParseInt(line_data[0])
- if success:
- xs.append(x / 1000)
- rest = tryParseIntList(line_data[1:])
- if rest is not None:
- if len(ys) == 0:
- ys = [[i] for i in rest]
- else:
- for i in range(len(rest)):
- ys[i].append(rest[i])
- file_data[path] = (xs, ys)
- # print("added to file_data")
- print("read all lines")
- async def plot_loop():
- print("before plot loop")
- while True:
- if len(axes) > 0:
- for key, ax in axes.items():
- if len(file_data) > 0:
- xs, ys = file_data[key]
- # print("reading file data")
- ax.clear()
- for i in range(len(ys)):
- y = ys[i]
- ax.plot(xs, y, label=labels[key][i + 1], linewidth=0.7)
- ax.set_title(key)
- ax.set_xlabel(labels[key][0])
- left, right = ax.get_xlim()
- if right - left > 10:
- ax.set_xlim(right - 10, right)
- plt.legend()
- plt.pause(0.2)
- await asyncio.sleep(0.2)
- # await asyncio.sleep(1)
- async def test():
- print("abc")
- def signal_handler(signal, frame):
- loop.stop()
- sys.exit(0)
- if __name__ == '__main__':
- loop = asyncio.get_event_loop()
- signal.signal(signal.SIGINT, signal_handler)
- paths = get_files()
- fig = init_plt(paths)
- asyncio.ensure_future(test())
- for p in paths:
- asyncio.ensure_future(read_file_data(p))
- asyncio.ensure_future(plot_loop())
- asyncio.ensure_future(test())
- loop.run_forever()
|