From 31843b844859d1bc364e25d1cc6bb939e9c93669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Kn=C3=BCttel?= Date: Thu, 6 Dec 2018 23:09:22 +0100 Subject: [PATCH] added a script for plotting --- plot.py | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 plot.py diff --git a/plot.py b/plot.py new file mode 100644 index 0000000..d6ed788 --- /dev/null +++ b/plot.py @@ -0,0 +1,96 @@ +import sys +import matplotlib.pyplot as plt +from collections import deque +# +# Copyright(c) 2018 Daniel Knüttel +# + + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Dieses Programm ist Freie Software: Sie können es unter den Bedingungen +# der GNU General Public License, wie von der Free Software Foundation, +# Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren +# veröffentlichten Version, weiterverbreiten und/oder modifizieren. +# +# Dieses Programm wird in der Hoffnung, dass es nützlich sein wird, aber +# OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite +# Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. +# Siehe die GNU General Public License für weitere Details. +# +# Sie sollten eine Kopie der GNU General Public License zusammen mit diesem +# Programm erhalten haben. Wenn nicht, siehe . + +""" +This script reads ``"x,y"`` values as lines from stdin and plots them. +If a line ``"XXX"`` is received the script will start a new plot. + +Example:: + + ./main | python3 plot.py + +""" + + +datax = deque() +datay = deque() + +cnt = 0 +dpoints = 0 + +error_occured = False + +for line in sys.stdin: + + if(line == "XXX\n"): + if(not datax): + continue + plt.clf() + plt.plot(datax, datay) + plt.xlabel("N") + plt.ylabel("Error") + + plt.savefig("{}.png".format(cnt)) + cnt += 1 + + dpoints += len(datax) + datax = deque() + datay = deque() + continue + try: + x, y = line.split(",") + x = float(x) + y = float(y) + datax.append(x) + datay.append(y) + except Exception as e: + print(line) + print(e) + error_occured = True + break +if(datax): + plt.clf() + plt.plot(datax, datay) + plt.xlabel("N") + plt.ylabel("Error") + + plt.savefig("{}.png".format(cnt)) + cnt += 1 + + dpoints += len(datax) + +if(error_occured): + print("Received malformed data and aborted early.") +print("Created", cnt, "plots containing", dpoints, "points in total.") +