timeline.py
3.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
from ... import options as opts
from ... import types
from ...charts.chart import Base
class Timeline(Base):
"""
`Timeline` provides functions like switching and playing between multiple charts.
"""
def __init__(self, init_opts: types.Init = opts.InitOpts()):
super().__init__(init_opts=init_opts)
self.options = {"baseOption": {"series": [], "timeline": {}}, "options": []}
self.add_schema()
self._time_points: types.Sequence = []
def add_schema(
self,
axis_type: str = "category",
orient: str = "horizontal",
symbol: types.Optional[str] = None,
symbol_size: types.Optional[types.Numeric] = None,
play_interval: types.Optional[types.Numeric] = None,
control_position: str = "left",
is_auto_play: bool = False,
is_loop_play: bool = True,
is_rewind_play: bool = False,
is_timeline_show: bool = True,
is_inverse: bool = False,
pos_left: types.Optional[str] = None,
pos_right: types.Optional[str] = None,
pos_top: types.Optional[str] = None,
pos_bottom: types.Optional[str] = "-5px",
width: types.Optional[str] = None,
height: types.Optional[str] = None,
linestyle_opts: types.Union[opts.LineStyleOpts, dict, None] = None,
label_opts: types.Optional[opts.LabelOpts] = None,
itemstyle_opts: types.ItemStyle = None,
graphic_opts: types.Graphic = None,
):
self.options.get("baseOption").get("timeline").update(
{
"axisType": axis_type,
"orient": orient,
"autoPlay": is_auto_play,
"controlPosition": control_position,
"loop": is_loop_play,
"rewind": is_rewind_play,
"show": is_timeline_show,
"inverse": is_inverse,
"symbol": symbol,
"symbolSize": symbol_size,
"playInterval": play_interval,
"left": pos_left,
"right": pos_right,
"top": pos_top,
"bottom": pos_bottom,
"width": width,
"height": height,
"lineStyle": linestyle_opts,
"label": label_opts,
"itemStyle": itemstyle_opts,
"graphic": graphic_opts,
}
)
return self
def add(self, chart: Base, time_point: str):
for dep in chart.js_dependencies.items:
self.js_dependencies.add(dep)
self._time_points.append(time_point)
self.options.get("baseOption").get("timeline").update(data=self._time_points)
self.options.get("options").append(
{
"legend": chart.options.get("legend"),
"series": chart.options.get("series"),
"xAxis": chart.options.get("xAxis"),
"yAxis": chart.options.get("yAxis"),
"title": chart.options.get("title"),
"tooltip": chart.options.get("tooltip"),
"visualMap": chart.options.get("visualMap"),
"color": chart.options.get("color"),
"graphic": chart.options.get("graphic"),
"bmap": chart.options.get("bmap"),
}
)
self.__check_components(chart)
self.options.get("baseOption").update(series=chart.options.get("series"))
return self
def __check_components(self, chart: Base):
components = [
"grid",
"xAxis",
"yAxis",
"polar",
"radiusAxis",
"geo",
"angleAxis",
"radar",
"visualMap",
"dataZoom",
"parallelAxis",
]
for component in components:
c = chart.options.get(component, None)
if c is not None:
self.options.get("baseOption").update({component: c})