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