#!/usr/bin/env python3 import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np import pandas as pd import pdfkit import math # internal candela references included during intial phases, to be deleted at future date # graph reporting classes class lf_bar_graph(): def __init__(self, _data_set= [[30,55,69,37],[45,67,34,22],[22,45,12,34]], _xaxis_name="x-axis", _yaxis_name="y-axis", _xaxis_categories=[1,2,3,4], _graph_image_name="image_name", _label=["bi-downlink", "bi-uplink",'uplink'], _color=None, _bar_width=0.25, _color_edge='grey', _font_weight='bold', _color_name=['lightcoral','darkgrey','r','g','b','y'], _figsize=(10,5), _dpi=96): self.data_set=_data_set self.xaxis_name=_xaxis_name self.yaxis_name=_yaxis_name self.xaxis_categories=_xaxis_categories self.graph_image_name=_graph_image_name self.label=_label self.color=_color self.bar_width=_bar_width self.color_edge=_color_edge self.font_weight=_font_weight self.color_name=_color_name self.figsize=_figsize def build_bar_graph(self): if self.color is None: i = 0 self.color = [] for col in self.data_set: self.color.append(self.color_name[i]) i = i+1 fig = plt.subplots(figsize=self.figsize) i = 0 for set in self.data_set: if i > 0: br = br1 br2 = [x + self.bar_width for x in br] plt.bar(br2, self.data_set[i], color=self.color[i], width=self.bar_width, edgecolor=self.color_edge, label=self.label[i]) br1 = br2 i = i+1 else: br1 = np.arange(len(self.data_set[i])) plt.bar(br1, self.data_set[i], color=self.color[i], width=self.bar_width, edgecolor=self.color_edge, label=self.label[i]) i=i+1 plt.xlabel(self.xaxis_name, fontweight='bold', fontsize=15) plt.ylabel(self.yaxis_name, fontweight='bold', fontsize=15) plt.xticks([r + self.bar_width for r in range(len(self.data_set[0]))], self.xaxis_categories) plt.legend() fig = plt.gcf() plt.savefig("%s.png"% (self.graph_image_name), dpi=96) print("{}.png".format(self.graph_image_name)) return "%s.png" % (self.graph_image_name) # Unit Test if __name__ == "__main__": output_html_1 = "graph_1.html" output_pdf_1 = "graph_1.pdf" # test build_bar_graph with defaults graph = lf_bar_graph() graph_html_obj = """

""" # test_file = open(output_html_1, "w") test_file.write(graph_html_obj) test_file.close() # write to pdf # write logic to generate pdf here # wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb # sudo apt install ./wkhtmltox_0.12.6-1.focal_amd64.deb options = {"enable-local-file-access" : None} # prevent eerror Blocked access to file pdfkit.from_file(output_html_1, output_pdf_1, options=options) # test build_bar_graph setting values dataset = [[45,67,34,22],[22,45,12,34],[30,55,69,37]] x_axis_values = [1,2,3,4] output_html_2 = "graph_2.html" output_pdf_2 = "graph_2.pdf" # test build_bar_graph with defaults graph = lf_bar_graph(_data_set=dataset, _xaxis_name="stations", _yaxis_name="Throughput 2 (Mbps)", _xaxis_categories=x_axis_values, _graph_image_name="Bi-single_radio_2.4GHz", _label=["bi-downlink", "bi-uplink",'uplink'], _color=None, _color_edge='red') graph_html_obj = """

""" # test_file = open(output_html_2, "w") test_file.write(graph_html_obj) test_file.close() # write to pdf # write logic to generate pdf here # wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb # sudo apt install ./wkhtmltox_0.12.6-1.focal_amd64.deb options = {"enable-local-file-access" : None} # prevent eerror Blocked access to file pdfkit.from_file(output_html_2, output_pdf_2, options=options)