1
|
1 # -*- coding: utf-8 -*-
|
|
2
|
|
3 import matplotlib.pyplot as plt
|
|
4 from matplotlib.gridspec import GridSpec
|
|
5
|
|
6
|
|
7 class BaseGridPlot(object):
|
|
8
|
|
9 def __init__(self, colors=None, *args, **kwargs):
|
|
10 if not colors:
|
|
11 self._colors = dict()
|
|
12 else:
|
|
13 self._colors = dict(colors)
|
|
14
|
|
15 self._set_colors(colors)
|
|
16 self._parse_kwargs(**kwargs)
|
|
17
|
|
18 # Create figure and axis
|
|
19 self._create_figure()
|
|
20 self._create_axes()
|
|
21
|
|
22 # end of def __init__
|
|
23
|
|
24 def _set_default_color(self, prop, defval):
|
|
25 if prop not in self._colors:
|
|
26 self._colors[prop] = defval
|
|
27 # end of def
|
|
28
|
|
29 def _set_colors(self):
|
|
30 raise NotImplementedError()
|
|
31
|
|
32 def _parse_kwargs(self, **kwargs):
|
|
33 """Parse the parameters for GridSpec
|
|
34 """
|
|
35 self._dim = kwargs.get('dim', (1, 1))
|
|
36 self._wspace = kwargs.get('wspace', 0)
|
|
37 self._hspace = kwargs.get('hspace', 0)
|
|
38 self._width_ratios = kwargs.get('width_ratios', [1])
|
|
39 self._height_ratios = kwargs.get('height_ratios', [1])
|
|
40
|
|
41 def _create_figure(self):
|
|
42 self._fig = plt.figure()
|
|
43 self._gridspec = GridSpec(*self._dim,
|
|
44 wspace=self._wspace,
|
|
45 hspace=self._hspace,
|
|
46 width_ratios=self._width_ratios,
|
|
47 height_ratios=self._height_ratios)
|
|
48
|
|
49 self._fig.set_facecolor('white')
|
|
50
|
|
51 def _create_axes(self):
|
|
52 self._axes = {}
|
|
53 ax = self._fig.add_subplot(self._gridspec[0, 0])
|
|
54 self._axes['base'] = ax
|
|
55 ax.grid(b=False)
|
|
56 ax.set_frame_on(False)
|
|
57 ax.invert_yaxis()
|
|
58 ax.xaxis.tick_top()
|
|
59
|
|
60 @property
|
|
61 def column_tick_fontsize(self):
|
|
62 return self._column_tick_fontsize
|
|
63
|
|
64 @column_tick_fontsize.setter
|
|
65 def column_tick_fontsize(self, val):
|
|
66 self._column_tick_fontsize = val
|
|
67 for ax in self._axes.values():
|
|
68 ax.tick_params(axis='x', which='major',
|
|
69 labelsize=self._column_tick_fontsize)
|
|
70
|
|
71 @property
|
|
72 def row_tick_fontsize(self):
|
|
73 return self._row_tick_fontsize
|
|
74
|
|
75 @row_tick_fontsize.setter
|
|
76 def row_tick_fontsize(self, val):
|
|
77 self._row_tick_fontsize = val
|
|
78 for ax in self._axes.values():
|
|
79 ax.tick_params(axis='y', which='major',
|
|
80 labelsize=self._row_tick_fontsize)
|
|
81
|
|
82 # # Properties
|
|
83 # @property
|
|
84 # def column_tick_fontsize(self):
|
|
85 # raise NotImplementedError()
|
|
86 #
|
|
87 # @column_tick_fontsize.setter
|
|
88 # def column_tick_fontsize(self, val):
|
|
89 # raise NotImplementedError()
|
|
90 #
|
|
91 # @property
|
|
92 # def row_tick_fontsize(self):
|
|
93 # raise NotImplementedError()
|
|
94 #
|
|
95 # @row_tick_fontsize.setter
|
|
96 # def row_tick_fontsize(self, val):
|
|
97 # raise NotImplementedError()
|
|
98
|
|
99 # @property
|
|
100 # def text_fontsize(self):
|
|
101 # raise NotImplementedError()
|
|
102 #
|
|
103 # @text_fontsize.setter
|
|
104 # def text_fontsize(self, val):
|
|
105 # raise NotImplementedError()
|
|
106 #
|
|
107 # @property
|
|
108 # def linewidth(self):
|
|
109 # raise NotImplementedError()
|
|
110 #
|
|
111 # @linewidth.setter
|
|
112 # def linewidth(self, val):
|
|
113 # raise NotImplementedError()
|
|
114
|
|
115 # Read-only properties
|
|
116 @property
|
|
117 def colors(self):
|
|
118 return self._colors
|
|
119
|
|
120 @property
|
|
121 def fig(self):
|
|
122 return self._fig
|
|
123
|
|
124 @property
|
|
125 def axes(self):
|
|
126 return self._axes
|
|
127
|
|
128 @property
|
|
129 def gridspec(self):
|
|
130 return self._gridspec
|
|
131
|
|
132
|
|
133 class BaseTable(BaseGridPlot):
|
|
134
|
|
135 def __init__(self, *args, **kwargs):
|
|
136 super().__init__(*args, **kwargs)
|
|
137 self._create_tables()
|
|
138
|
|
139 def _create_tables(self):
|
|
140 raise NotImplementedError()
|
|
141
|
|
142 @property
|
|
143 def tables(self):
|
|
144 return self._tables |