def _compute_y_labels_major(self): if self.y_labels_major_every: self._y_labels_major = [ self._y_labels[i][1] for i in range(0, len(self._y_labels), self.y_labels_major_every) ] elif self.y_labels_major_count: label_count = len(self._y_labels) major_count = self.y_labels_major_count if (major_count >= label_count): self._y_labels_major = [label[1] for label in self._y_labels] else: self._y_labels_major = [ self._y_labels[int( i * (label_count - 1) / (major_count - 1) )][1] for i in range(major_count) ] elif self.y_labels_major: self._y_labels_major = list(map(self._adapt, self.y_labels_major)) elif self._y_labels: self._y_labels_major = majorize(cut(self._y_labels, 1)) else: self._y_labels_major = []
def _y_axis(self, draw_axes=True): """Override y axis to make it polar""" if not self._y_labels: return axis = self.svg.node(self.nodes['plot'], class_="axis y web") if self.y_labels_major: y_labels_major = self.y_labels_major elif self.y_labels_major_every: y_labels_major = [self._y_labels[i][1] for i in range( 0, len(self._y_labels), self.y_labels_major_every)] elif self.y_labels_major_count: label_count = len(self._y_labels) major_count = self.y_labels_major_count if (major_count >= label_count): y_labels_major = [label[1] for label in self._y_labels] else: y_labels_major = [self._y_labels[ int(i * (label_count - 1) / (major_count - 1))][1] for i in range(major_count)] else: y_labels_major = majorize( cut(self._y_labels, 1) ) for label, r in reversed(self._y_labels): major = r in y_labels_major if not (self.show_minor_y_labels or major): continue guides = self.svg.node(axis, class_='guides') self.svg.line( guides, [self.view((r, theta)) for theta in self._x_pos], close=True, class_='%sguide line' % ( 'major ' if major else '')) x, y = self.view((r, self._x_pos[0])) self.svg.node( guides, 'text', x=x - 5, y=y, class_='major' if major else '' ).text = label
def _y_major_labels(self): """Getter for the y major label""" if self.y_labels_major: return self.y_labels_major if self.y_labels_major_every: return [self._y_labels[i][1] for i in range( 0, len(self._y_labels), self.y_labels_major_every)] if self.y_labels_major_count: label_count = len(self._y_labels) major_count = self.y_labels_major_count if (major_count >= label_count): return [label[1] for label in self._y_labels] return [self._y_labels[ int(i * (label_count - 1) / (major_count - 1))][1] for i in range(major_count)] return majorize( cut(self._y_labels, 1) )
def _y_axis(self, draw_axes=True): if not self._y_labels: return axis = self.svg.node(self.nodes['plot'], class_="axis y web") if self.y_labels_major: y_labels_major = self.y_labels_major elif self.y_labels_major_every: y_labels_major = [ self._y_labels[i][1] for i in range(0, len(self._y_labels), self.y_labels_major_every) ] elif self.y_labels_major_count: label_count = len(self._y_labels) major_count = self.y_labels_major_count if (major_count >= label_count): y_labels_major = [label[1] for label in self._y_labels] else: y_labels_major = [ self._y_labels[int(i * (label_count - 1) / (major_count - 1))][1] for i in range(major_count) ] else: y_labels_major = majorize(cut(self._y_labels, 1)) for label, r in reversed(self._y_labels): major = r in y_labels_major if not (self.show_minor_y_labels or major): continue guides = self.svg.node(axis, class_='guides') self.svg.line(guides, [self.view((r, theta)) for theta in self.x_pos], close=True, class_='%sguide line' % ('major ' if major else '')) x, y = self.view((r, self.x_pos[0])) self.svg.node(guides, 'text', x=x - 5, y=y, class_='major' if major else '').text = label
def test_majorize(): """Test majorize function""" assert majorize(()) == [] assert majorize((0,)) == [] assert majorize((0, 1)) == [] assert majorize((0, 1, 2)) == [] assert majorize((-1, 0, 1, 2)) == [0] assert majorize((0, .1, .2, .3, .4, .5, .6, .7, .8, .9, 1)) == [0, .5, 1] assert majorize((0, .2, .4, .6, .8, 1)) == [0, 1] assert majorize((-.4, -.2, 0, .2, .4, .6, .8, 1)) == [0, 1] assert majorize( (-1, -.8, -.6, -.4, -.2, 0, .2, .4, .6, .8, 1)) == [-1, 0, 1] assert majorize((0, .2, .4, .6, .8, 1, 1.2, 1.4, 1.6)) == [0, 1] assert majorize((0, .2, .4, .6, .8, 1, 1.2, 1.4, 1.6, 1.8, 2)) == [0, 1, 2] assert majorize( (0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120)) == [0, 50, 100] assert majorize( (0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36)) == [0, 10, 20, 30] assert majorize((0, 1, 2, 3, 4, 5)) == [0, 5] assert majorize((-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5)) == [-5, 0, 5] assert majorize((-5, 5, -4, 4, 0, 1, -1, 3, -2, 2, -3)) == [-5, 0, 5] assert majorize((0, 1, 2, 3, 4)) == [0] assert majorize((3, 4, 5, 6)) == [5] assert majorize((0, 1, 2, 3, 4, 5, 6, 7, 8)) == [0, 5] assert majorize((-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5)) == [-5, 0, 5] assert majorize((-6, -5, -4, -3, -2, -1, 0, 1, 2, 3)) == [-5, 0] assert majorize((-6, -5, -4, -3)) == [-5] assert majorize((1, 10, 100, 1000, 10000, 100000)) == [] assert majorize(range(30, 70, 5)) == [30, 40, 50, 60] assert majorize(range(20, 55, 2)) == [20, 30, 40, 50] assert majorize(range(21, 83, 3)) == [30, 45, 60, 75]
def _y_axis(self): """Make the y axis: labels and guides""" if not self._y_labels or not self.show_y_labels: return axis = self.svg.node(self.nodes['plot'], class_="axis y") if (0 not in [label[1] for label in self._y_labels] and self.show_y_guides): self.svg.node(axis, 'path', d='M%f %f h%f' % (0, self.view.height, self.view.width), class_='line') if self.y_labels_major: y_labels_major = self.y_labels_major elif self.y_labels_major_every: y_labels_major = [ self._y_labels[i][1] for i in range(0, len(self._y_labels), self.y_labels_major_every) ] elif self.y_labels_major_count: label_count = len(self._y_labels) major_count = self.y_labels_major_count if (major_count >= label_count): y_labels_major = [label[1] for label in self._y_labels] else: y_labels_major = [ self._y_labels[int(i * (label_count - 1) / (major_count - 1))][1] for i in range(major_count) ] else: y_labels_major = majorize(cut(self._y_labels, 1)) for label, position in self._y_labels: major = position in y_labels_major if not (self.show_minor_y_labels or major): continue guides = self.svg.node( axis, class_='%sguides' % ('logarithmic ' if self.logarithmic else '')) x = -5 y = self.view.y(position) if not y: continue if self.show_y_guides: self.svg.node( guides, 'path', d='M%f %f h%f' % (0, y, self.view.width), class_='%s%sline' % ('major ' if major else '', 'guide ' if position != 0 or not self.show_y_guides else '')) text = self.svg.node(guides, 'text', x=x, y=y + .35 * self.label_font_size, class_='major' if major else '') if isinstance(label, dict): label = label['title'] text.text = label if self.y_label_rotation: text.attrib['transform'] = "rotate(%d %f %f)" % ( self.y_label_rotation, x, y) if self._y_2nd_labels: secondary_ax = self.svg.node(self.nodes['plot'], class_="axis y2") for label, position in self._y_2nd_labels: major = position in y_labels_major if not (self.show_minor_x_labels or major): continue # it is needed, to have the same structure as primary axis guides = self.svg.node(secondary_ax, class_='guides') x = self.view.width + 5 y = self.view.y(position) text = self.svg.node(guides, 'text', x=x, y=y + .35 * self.label_font_size, class_='major' if major else '') text.text = label if self.y_label_rotation: text.attrib['transform'] = "rotate(%d %f %f)" % ( self.y_label_rotation, x, y)
def _y_axis(self): """Make the y axis: labels and guides""" if not self._y_labels or not self.show_y_labels: return axis = self.svg.node(self.nodes['plot'], class_="axis y") if (0 not in [label[1] for label in self._y_labels] and self.show_y_guides): self.svg.node( axis, 'path', d='M%f %f h%f' % (0, self.view.height, self.view.width), class_='line' ) if self.y_labels_major: y_labels_major = self.y_labels_major elif self.y_labels_major_every: y_labels_major = [self._y_labels[i][1] for i in range( 0, len(self._y_labels), self.y_labels_major_every)] elif self.y_labels_major_count: label_count = len(self._y_labels) major_count = self.y_labels_major_count if (major_count >= label_count): y_labels_major = [label[1] for label in self._y_labels] else: y_labels_major = [self._y_labels[ int(i * (label_count - 1) / (major_count - 1))][1] for i in range(major_count)] else: y_labels_major = majorize( cut(self._y_labels, 1) ) for label, position in self._y_labels: major = position in y_labels_major if not (self.show_minor_y_labels or major): continue guides = self.svg.node(axis, class_='%sguides' % ( 'logarithmic ' if self.logarithmic else '' )) x = -5 y = self.view.y(position) if not y: continue if self.show_y_guides: self.svg.node( guides, 'path', d='M%f %f h%f' % (0, y, self.view.width), class_='%s%sline' % ( 'major ' if major else '', 'guide ' if position != 0 else '')) text = self.svg.node( guides, 'text', x=x, y=y + .35 * self.label_font_size, class_='major' if major else '' ) if isinstance(label, dict): label = label['title'] text.text = label if self.y_label_rotation: text.attrib['transform'] = "rotate(%d %f %f)" % ( self.y_label_rotation, x, y) if self._y_2nd_labels: secondary_ax = self.svg.node( self.nodes['plot'], class_="axis y2") for label, position in self._y_2nd_labels: major = position in y_labels_major if not (self.show_minor_x_labels or major): continue # it is needed, to have the same structure as primary axis guides = self.svg.node(secondary_ax, class_='guides') x = self.view.width + 5 y = self.view.y(position) text = self.svg.node( guides, 'text', x=x, y=y + .35 * self.label_font_size, class_='major' if major else '' ) text.text = label if self.y_label_rotation: text.attrib['transform'] = "rotate(%d %f %f)" % ( self.y_label_rotation, x, y)