Completed
Push — master ( 526f62...1797ba )
by Tinghui
01:09
created

LabeledLine.set_figure()   A

Complexity

Conditions 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
c 1
b 0
f 0
dl 0
loc 3
rs 10
1
import math
2
import matplotlib.lines as mlines
3
import matplotlib.text as mtext
4
import matplotlib.transforms as mtransforms
5
6
7
class LabeledLine(mlines.Line2D):
8
    """Draw a line with label in the middle on top of the line
9
    """
10
    def __init__(self, *args, **kwargs):
11
        self.text = mtext.Text(0, 0, '', verticalalignment='center', horizontalalignment='center',
12
                               color='b')
13
        super().__init__(*args, **kwargs)
14
        self.text.set_text(self.get_label())
15
        self.text.set_zorder(self.get_zorder() + 1)
16
        self.text.set_alpha(self.get_alpha())
17
18
    def set_figure(self, figure):
19
        self.text.set_figure(figure)
20
        super().set_figure(figure)
21
22
    def set_axes(self, axes):
23
        self.text.set_axes(axes)
24
        super().set_axes(axes)
25
26
    def set_transform(self, transform):
27
        texttrans = transform
28
        self.text.set_transform(texttrans)
29
        super().set_transform(transform)
30
31
    def set_data(self, x, y):
32
        if len(x) > 1:
33
            text_x = .5 * (x[0] + x[1])
34
            text_y = .5 * (y[0] + y[1])
35
            text_rot = - math.degrees(math.atan((y[1] - y[0]) / (x[1] - x[0])))
36
            self.text.set_position((text_x, text_y))
37
            self.text.set_rotation(text_rot)
38
        super().set_data(x, y)
39
40
    def draw(self, renderer):
41
        # draw my label at the end of the line with 2 pixel offset
42
        super().draw(renderer)
43
        self.text.draw(renderer)
44