forked from streamlit/streamlit-example
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchart_base.py
88 lines (65 loc) · 2.18 KB
/
chart_base.py
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
import pandas as pd
import altair as alt
from abc import ABC, abstractmethod
from urval import UrvalsLista
from assemple_charts import AssembleCharts
class ChartBase(ABC):
def __init__(
self,
data: pd.DataFrame,
title: str = "",
subtitle = [""],
urval: UrvalsLista = None,
):
plot_title = alt.TitleParams(title, subtitle=subtitle)
self.c: alt.Chart = alt.Chart(data=data, title=plot_title)
self.urval: UrvalsLista = urval
self.add_configuration()
def get_chart(self):
return self.c
def add_configuration(self):
self.add_transform_fold()
self.add_transform_aggregate()
self.add_transform_lookup()
self.add_marker()
self.add_encode()
self.add_filter()
@abstractmethod
def add_transform_fold(self):
pass
@abstractmethod
def add_marker(self):
pass
@abstractmethod
def add_encode(self):
pass
def add_filter(self):
""" måste inte vara med i subbklasser"""
pass
def add_transform_lookup(self):
""" måste inte vara med i subbklasser"""
pass
def add_transform_aggregate(self):
""" måste inte vara med i subbklasser"""
pass
def add_tranform_fold_wide_to_long_by_party(self):
self.c = self.c.transform_fold(fold = self.urval.partier_urval, as_=["Parti", "stöd"])
def get_alt_color_by_parti_and_urval(self, orient="top", suppress_legend=False):
if suppress_legend:
legend_var = None
else:
legend_var = alt.Legend(orient=orient)
color = alt.Color(
"Parti:N",
scale=alt.Scale(
domain=self.urval.partier_urval,
range=self.urval.färger_partier_urval,
),
legend=legend_var,
)
return color
@staticmethod
def assemple_charts(chart_exp, labelfont_size: int = 14):
ac = AssembleCharts(chart_exp=chart_exp, label_font_size=labelfont_size)
chart_exp = ac.get_assembled_charts()
return chart_exp