Source code for lodstorage.plot

"""
Created on 2020-07-05

@author: wf
"""
import os
from collections import Counter

import matplotlib.pyplot as plt
import numpy as np


[docs] class Plot(object): """ create Plot based on counters see https://stackoverflow.com/questions/19198920/using-counter-in-python-to-build-histogram """ def __init__( self, valueList, title, xlabel=None, ylabel=None, gformat=".png", fontsize=12, plotdir=None, debug=False, ): """ Constructor """ self.counter = Counter(valueList) self.valueList = valueList self.title = title self.xlabel = xlabel self.ylabel = ylabel self.fontsize = fontsize self.gformat = gformat self.debug = debug path = os.path.dirname(__file__) if plotdir is not None: self.plotdir = plotdir else: self.plotdir = path + "/../plots/" os.makedirs(self.plotdir, exist_ok=True)
[docs] def titleMe(self): """set my title and labels""" plt.title(self.title, fontsize=self.fontsize) if self.xlabel is not None: plt.xlabel(self.xlabel) if self.ylabel is not None: plt.ylabel(self.ylabel)
[docs] def showMe(self, mode="show", close=True): """show me in the given mode""" if mode == "show": plt.show() else: plt.savefig(self.plotdir + self.title + self.gformat) if close: plt.close()
[docs] def barchart(self, mode="show"): """barchart based histogram for the given counter""" labels, values = zip(*self.counter.items()) indexes = np.arange(len(labels)) width = 1 self.titleMe() plt.bar(indexes, values, width) plt.xticks(indexes + width * 0.5, labels) plt.yticks(np.arange(1, max(values) + 1, step=1)) self.showMe(mode)
[docs] def showDebug(self): print(" value list: ", self.valueList) print("counter items: ", self.counter.items()) print("counter values: ", self.counter.values()) print("counter keys: ", self.counter.keys())
[docs] def hist(self, mode="show"): """create histogram for the given counter""" if self.debug: self.showDebug() self.titleMe() # see https://stackoverflow.com/a/2162045/1497139 plt.hist(self.valueList, bins=len(self.counter.keys())) self.showMe(mode) pass