Source code for plots.cls_bars_vertical

# python3

import os,sys
import math
import numbers
import tikzpy.obj_data
import copy
import types
import numpy as np

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))
import cls_plots

def log(txt):

    print(txt)

[docs]class _bars_vertical(object): """**Vertical bars plot:** .. _bars_vertical_cls: Creates a vertical bars plot. :ivar p0: initial point of the plot :ivar sep_L: height of the bars :ivar width: width of the longer bar :ivar width: width of the longer bar :ivar lst_title: shapes conform the title :ivar title: text of the title :ivar lbl_axis0: label to use in the data buffer for bars values :ivar lbl_label1: label to use in the data buffer for bars text column 2 :ivar lbl_label2: label to use in the data buffer for bars text column 3 :ivar lst_text2: shapes conform the vertical text column 2 :ivar lst_text3: shapes conform the vertical text column 3 :ivar lst_path0: shapes conform the bars :ivar shps: all the shapes that conform the plot :Functions: * :ref:`draw_plot() <assem_draw_plot>` * :ref:`load_data_buffer(data_buff) <assem_load_load_data_buffer>` **Usage** * See :doc:`plots examples </_examples/tikzpy_plots/test_gen>`, :ref:`example 1 <ex_plots_bars_vertical_1>`, :ref:`example 2 <ex_plots_bars_vertical_2>` """ def __init__(self, parent): self._parent = parent self._tik = self._parent.parent ### List of data properties and setup self.lst_data_conf = ["p0","sep_L","width", "lst_title", "title", "lst_text2", "lst_text3", "lst_path0"] ### List of labels from databuffer to define the axis self.lst_data_conf += ["data_buff","shps"] self.lst_data_conf += ["lbl_axis0", "lbl_label1", "lbl_label2"] def load_data_ini(self, assem): ### Initialize properties _key = assem.id self._parent.assemblys[_key]["data_buff"] = None self._parent.assemblys[_key]["shps"] = [] self._parent.assemblys[_key]["p0"] = None self._parent.assemblys[_key]["sep_L"] = 1 self._parent.assemblys[_key]["width"] = 5 self._parent.assemblys[_key]["lst_title"] = [] self._parent.assemblys[_key]["title"] = "" self._parent.assemblys[_key]["lst_text2"] = [] self._parent.assemblys[_key]["lst_text3"] = [] self._parent.assemblys[_key]["lst_path0"] = [] def set_property(self, attribute, value, _key): ### Properties setter bottleneck if attribute == "p0": self._parent.assemblys[_key][attribute] = value.copy() else: self._parent.assemblys[_key][attribute] = value def get_property(self, attribute, _key): ### Properties getter bottleneck return self._parent.assemblys[_key][attribute] ############# declare methods functions def add_element(self, text, handler, thickness = "thin", separation = None): #handler.parent.assemblys[handler._key]["element"].append([text, thickness, separation]) handler.element.append([text, thickness, separation]) def load_data_buffer(self, handler, data_buff): if data_buff is None: self._tik.error("data_buffer is a None object", ref = "ver_bar") handler.data_buff = data_buff ############# Main draw function def draw_group_elements(self, units, assem): ### Draw group of shapes function call from main drawer functions ### Common heander tik = self._tik _key = assem.id shps = [] ## # Loop elements for ii in range(0,len(assem.data_buff[assem.lbl_axis0])): # Normalize data max_length = np.max(assem.data_buff[assem.lbl_axis0]) aux_lbl_axis0 = assem.lbl_axis0 + tik.dbuffer.aux_def + "0" assem.data_buff[aux_lbl_axis0] = assem.width * assem.data_buff[assem.lbl_axis0] / (1.0 * max_length) # Add paths l1 = tik.shp.path([], layer = 0) if ii == 0: p0 = assem.p0 else: p0 = p3.copy() l1.addpto = p0 p1=p0.copy() p1.x = p1.x + assem.data_buff[aux_lbl_axis0][ii] / 2. l1.addpto = p1 p2=p1.copy() p2.y = p2.y + assem.sep_L l1.addpto = p2 p3=p2.copy() p3.x = p3.x - assem.data_buff[aux_lbl_axis0][ii] / 2. l1.addpto = p3 p4=p3.copy() p4.x = p4.x - assem.data_buff[aux_lbl_axis0][ii] / 2. l1.addpto = p4 p5=p4.copy() p5.y = p5.y - assem.sep_L l1.addpto = p5 l1.addpto = p0 l1.zorder = assem.zorder l1.addlabel = assem.labels assem.lst_path0.append(l1) # Add text3 ptxt3 = p0.copy() ptxt3.y = ptxt3.y + assem.sep_L/2. txt3 = tik.shp.text(ptxt3, assem.data_buff[assem.lbl_label1][ii], layer=0, color='', fill='', rotate_text=0, position='', align='center') txt3.zorder = assem.zorder + 1e-6 txt3.addlabel = assem.labels assem.lst_text3.append(txt3) # Add text2 ptxt2 = p1.copy() ptxt2.y = ptxt2.y + assem.sep_L/2. ptxt2.x = ptxt2.x txt2 = tik.shp.text(ptxt2, assem.data_buff[assem.lbl_label2][ii], layer=0, color='', fill='', rotate_text=0, position='right', align='right') txt2.zorder = assem.zorder + 1e-6 txt2.addlabel = assem.labels assem.lst_text2.append(txt2) # Title if ii == 0: pto_title = p0.copy() pto_title.y = pto_title.y - assem.sep_L/2. tit = tik.shp.text(pto_title, assem.title, layer=0, color='', fill='', rotate_text=0, position='', align='center') tit.zorder = assem.zorder + 1e-6 tit.addlabel = assem.labels assem.lst_title.append(tit) assem.shps = assem.shps + assem.lst_path0 + assem.lst_text3 + assem.lst_text2 + assem.lst_title ### Common return return assem.shps def is_number(self, s): try: if s is None: return False float(s) return True except ValueError: return False