def plot(self, data): """\brief add data to the plot drawer \param data \ref data_chart.data_chart instance """ if len(self._data_charts) == 0: self._data_charts.append(data) self._rectangle.set_x_axis_type(data.get_x_axis_type()) self._rectangle.set_y_axis_type(data.get_y_axis_type()) else: xa = data.get_x_axis_type() ya = data.get_y_axis_type() rxa = self._rectangle.get_x_axis_type() rya = self._rectangle.get_y_axis_type() if xa != rxa: raise od_exception_parameter_error("x axis type must be {0} not {1}".format(rxa, xa)) elif ya != rya: raise od_exception_parameter_error("y axis type must be {0} not {1}".format(rya, ya)) else: self._data_charts.append(data)
def _draw_vertical_colon_numbers(self, context, left_x, y_coordinates, numbers): """\brief \param context - cairo context \param left_x - X coordinate of left top corner of colon \param y_coordinates - coordinates of the middle of each text \param numbers - list of numbers, numbers to draw """ if len(y_coordinates) != len(numbers): raise od_exception_parameter_error(u'length of y_coordinates and numbers parameters must be same') context.select_font_face(self._family, self._slant, self._weight) context.set_font_size(self._size) context.set_source_rgb(*self._color) fextent = context.font_extents() for y_cord, nmb in zip(y_coordinates, numbers): context.move_to(left_x, y_cord - (fextent[2] / 2.) + fextent[0]) context.show_text(format_number(nmb, 6))
def _generate_numbers(self, low_limit, up_limit, maxnumbers): """\brief generate list of number can be drawed between limits \param low_limit - float, lower limit of the range \param up_limit - float, upper limit \param maxnumbers - int, maximum count of numbers can be drawed """ if maxnumbers < 0: raise od_exception_parameter_error(u'maxnumbers must at least 0') elif maxnumbers == 0: return [] rng = trunc(up_limit - low_limit) if rng > maxnumbers: multiplier = self._find_ascending_multiplier(low_limit, up_limit, maxnumbers) elif rng < maxnumbers: multiplier = self._find_descending_multiplier(low_limit, up_limit, maxnumbers) else: multiplier = 1 first = (low_limit if low_limit % multiplier == 0 else (trunc(low_limit / multiplier) + 1) * multiplier) # first drawing number ret = [] while first <= up_limit: ret.append(first) first += multiplier return ret