annotate tools/myTools/bin/sfa/plot/table_hierarchical_clustering.py @ 1:7e5c71b2e71f draft default tip

Uploaded
author laurenmarazzi
date Wed, 22 Dec 2021 16:00:34 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
1
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
2 import numpy as np
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
3 import scipy.spatial.distance as distance
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
4 import scipy.cluster.hierarchy as sch
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
5
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
6 import matplotlib
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
7 import matplotlib.pyplot as plt
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
8 import matplotlib.gridspec as gridspec
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
9
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
10 import seaborn as sns
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
11
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
12 from .table_condition import ConditionTable
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
13
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
14
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
15 class HierarchicalClusteringTable(ConditionTable):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
16
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
17 def __init__(self, conds, samples, *args, **kwargs):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
18 # Set references for data objects
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
19 self._dfs = samples # DataFrame of samples to be clustered.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
20 super().__init__(conds, *args, **kwargs)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
21 self._create_colorbar()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
22 self.column_tick_fontsize = self._table_tick_fontsize
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
23 # end of def __init__
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
24
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
25 def _parse_kwargs(self, **kwargs):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
26 """Parse the keyword arguments.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
27 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
28
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
29 self._vmin = kwargs.get('vmin', None)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
30 self._vmax = kwargs.get('vmax', None)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
31
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
32 colors_blend = ['red', 'white', np.array([0, 1, 0, 1])]
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
33 default_cmap = sns.blend_palette(colors_blend,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
34 n_colors=100,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
35 as_cmap=True)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
36 self._cmap = kwargs.get('cmap', default_cmap)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
37
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
38 self._dim = kwargs.get('dim', (2, 5))
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
39 self._wspace = kwargs.get('wspace', 0.005)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
40 self._hspace = kwargs.get('hspace', 0.005)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
41
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
42 default_width_ratios = [self._dfc.shape[1],
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
43 0.25,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
44 self._dfs.shape[1],
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
45 0.5*self._dfs.shape[1],
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
46 0.05*self._dfs.shape[1]]
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
47
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
48 default_height_ratios = [self._dfs.shape[1],
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
49 self._dfc.shape[0]]
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
50
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
51 self._width_ratios = kwargs.get('width_ratios',
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
52 default_width_ratios)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
53 self._height_ratios = kwargs.get('height_ratios',
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
54 default_height_ratios)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
55
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
56 default_position = {'condition': np.array([1, 0]),
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
57 'heatmap': np.array([1, 2]),
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
58 'row_dendrogram': np.array([1, 3]),
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
59 'col_dendrogram': np.array([0, 2]),
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
60 'colorbar': np.array([1, 4])}
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
61
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
62 self._axes_position = kwargs.get('axes_position',
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
63 default_position)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
64
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
65 self._row_cluster = kwargs.get('row_cluster', True)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
66 self._col_cluster = kwargs.get('col_cluster', True)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
67
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
68 if self._row_cluster:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
69 self._row_method = kwargs.get('row_method', 'single')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
70 self._row_metric = kwargs.get('row_metric', 'cityblock')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
71 self._row_dend_linewidth = kwargs.get('row_dend_linewidth', 0.5)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
72
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
73 if self._col_cluster:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
74 self._col_method = kwargs.get('col_method', 'single')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
75 self._col_metric = kwargs.get('col_metric', 'cityblock')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
76 self._col_dend_linewidth = kwargs.get('col_dend_linewidth', 0.5)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
77
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
78 self._table_linewidth = kwargs.get('table_linewidth', 0.5)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
79 self._table_tick_fontsize = kwargs.get('table_tick_fontsize', 5)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
80 self._colorbar_tick_fontsize = kwargs.get('colorbar_tick_fontsize', 5)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
81
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
82 def _create_axes(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
83 self._axes = {}
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
84 # pos = self._axes_position['heatmap']
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
85 # ax_heatmap = self._fig.add_subplot(self._gridspec[pos[0], pos[1]])
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
86 # self._axes.append(ax_heatmap)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
87
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
88 pos = self._axes_position['condition']
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
89 ax_conds = self._fig.add_subplot(self._gridspec[pos[0], pos[1]])
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
90 self._axes['condition'] = ax_conds
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
91 ax_conds.grid(b=False)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
92 ax_conds.set_frame_on(False)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
93 ax_conds.invert_yaxis()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
94 ax_conds.xaxis.tick_bottom()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
95
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
96 self._perform_clustering()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
97
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
98 def _create_tables(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
99 super()._create_tables()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
100 ax_heatmap = self._axes['heatmap']
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
101
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
102 # Draw lines on table and heatmap
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
103 self.tables[0].linewidth = self._table_linewidth
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
104 for x in range(self._dfs.shape[1]+1):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
105 ax_heatmap.axvline(x-0.5,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
106 linewidth=self._table_linewidth,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
107 color='k', zorder=10)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
108
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
109 for y in range(self._dfs.shape[0]+1):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
110 ax_heatmap.axhline(y-0.5,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
111 linewidth=self._table_linewidth,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
112 color='k', zorder=10)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
113
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
114 def _perform_clustering(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
115 sch.set_link_color_palette(['black'])
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
116 if self._row_cluster:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
117
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
118 row_pairwise_dists = distance.pdist(self._dfs,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
119 metric=self._row_metric)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
120 row_clusters = sch.linkage(row_pairwise_dists,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
121 metric=self._row_metric,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
122 method=self._row_method)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
123
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
124 with plt.rc_context({'lines.linewidth': self._row_dend_linewidth}):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
125 # Dendrogram for row clustering
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
126 pos = self._axes_position['row_dendrogram']
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
127 subgs = self._gridspec[pos[0], pos[1]]
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
128 ax_row_den = self._fig.add_subplot(subgs)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
129 row_den = sch.dendrogram(row_clusters,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
130 color_threshold=np.inf,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
131 orientation='right')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
132
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
133 ax_row_den.set_facecolor("white")
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
134 self._clean_axis(ax_row_den)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
135 self._axes['row_dendrogram'] = ax_row_den
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
136
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
137 ind_row = row_den['leaves']
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
138 # Rearrange the DataFrame for condition according to
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
139 # the clustering result.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
140 self._dfc = self._dfc.iloc[ind_row, :]
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
141 else:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
142 ind_row = range(self._dfs.index.size) #self._dfs.index.ravel()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
143
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
144 if self._col_cluster:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
145 col_pairwise_dists = distance.pdist(self._dfs.T,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
146 metric=self._col_metric)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
147 col_clusters = sch.linkage(col_pairwise_dists,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
148 metric=self._col_metric,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
149 method=self._col_method)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
150
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
151 with plt.rc_context({'lines.linewidth': self._col_dend_linewidth}):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
152 # Dendrogram for column clustering
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
153 pos = self._axes_position['col_dendrogram']
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
154 ax_col_den = self._fig.add_subplot(self._gridspec[pos[0], pos[1]])
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
155 col_den = sch.dendrogram(col_clusters,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
156 color_threshold=np.inf,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
157 orientation='top')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
158 ax_col_den.set_facecolor("white")
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
159 self._clean_axis(ax_col_den)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
160 self._axes['col_dendrogram'] = ax_col_den
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
161 ind_col = col_den['leaves']
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
162 else:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
163 # ind_col = self._dfs.columns.ravel()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
164 ind_col = range(self._dfs.columns.size)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
165
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
166 # Heatmap
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
167 pos = self._axes_position['heatmap']
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
168 subgs = self._gridspec[pos[0], pos[1]]
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
169 ax_heatmap = self._fig.add_subplot(subgs)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
170 self._heatmap = ax_heatmap.matshow(self._dfs.iloc[ind_row, ind_col],
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
171 vmin=self._vmin,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
172 vmax=self._vmax,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
173 interpolation='nearest',
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
174 aspect='auto',
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
175 #origin='lower',
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
176 cmap=self._cmap)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
177
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
178 ax_heatmap.grid(b=False)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
179 ax_heatmap.set_frame_on(True)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
180 ax_heatmap.xaxis.tick_bottom()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
181 self._axes['heatmap'] = ax_heatmap
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
182 self._clean_axis(ax_heatmap)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
183
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
184 # Remove the y-labels of condition table
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
185 #ax_conds = self._axes['condition']
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
186
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
187 # Add column labels
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
188 ax_heatmap.set_xticks(np.arange(0, self._dfs.shape[1], 1))
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
189 ax_heatmap.set_xticklabels(np.array(self._dfs.columns[ind_col]),
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
190 rotation=90, minor=False)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
191
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
192 ax_heatmap.tick_params(axis='x', which='major', pad=-2)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
193
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
194 # Remove the tick lines
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
195 for line in ax_heatmap.get_xticklines():
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
196 line.set_markersize(0)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
197
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
198 for line in ax_heatmap.get_yticklines():
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
199 line.set_markersize(0)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
200
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
201 def _create_colorbar(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
202 pos = self._axes_position['colorbar']
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
203 subgs = self._gridspec[pos[0], pos[1]]
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
204 ax_colorbar = self._fig.add_subplot(subgs)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
205
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
206 cb = self._fig.colorbar(self._heatmap, ax_colorbar,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
207 drawedges=False) #True)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
208 self._colorbar = cb
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
209 #cb.ax.yaxis.set_ticks_position('right')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
210 #self._clean_axis(cb.ax)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
211 # for sp in cb.ax.spines.values():
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
212 # sp.set_visible(False)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
213 cb.ax.yaxis.set_ticks_position('none')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
214 cb.ax.yaxis.set_tick_params(pad=-2)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
215 cb.ax.yaxis.set_label_position('right')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
216 cb.outline.set_edgecolor('black')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
217 cb.outline.set_linewidth(self._table_linewidth)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
218 self.colorbar_fontsize = self._colorbar_tick_fontsize
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
219
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
220 def _clean_axis(self, ax):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
221 """Remove ticks, tick labels, and frame from axis
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
222 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
223 ax.xaxis.set_ticks_position('none')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
224 ax.yaxis.set_ticks_position('none')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
225 ax.xaxis.set_ticks([])
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
226 ax.yaxis.set_ticks([])
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
227 for sp in ax.spines.values():
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
228 sp.set_visible(False)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
229
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
230 def _add_labels(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
231 """Add only column labels for condition table.
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
232 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
233 tb = self._tables[0]
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
234 tb.add_column_labels()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
235
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
236 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
237 def table_linewidth(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
238 return self._table_linewidth
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
239
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
240 @table_linewidth.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
241 def table_linewidth(self, val):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
242 self._table_linewidth = val
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
243
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
244 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
245 def colorbar(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
246 return self._colorbar
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
247
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
248 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
249 def colorbar_fontsize(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
250 return self._colorbar_tick_fontsize
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
251
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
252 @colorbar_fontsize.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
253 def colorbar_fontsize(self, val):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
254 self._colorbar_tick_fontsize = val
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
255 ticks = self._colorbar.ax.yaxis.get_ticklabels()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
256 for t in ticks:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
257 t.set_fontsize(self._colorbar_tick_fontsize)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
258
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
259 # @column_tick_fontsize.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
260 # def column_tick_fontsize(self, val):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
261 # self._column_tick_fontsize = val
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
262 # for ax in self._axes:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
263 # ax.tick_params(axis='x', which='major',
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
264 # labelsize=self._column_tick_fontsize)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
265
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
266 # def _set_colors(self, colors):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
267 # super()._set_colors(colors)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
268 #
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
269 # def _add_labels(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
270 # super()._add_labels() # Add labels for condition table
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
271
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
272
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
273 # def _add_column_labels(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
274 # """Add column labels using x-axis
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
275 # """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
276 # xlabels = list(self._dfs.columns)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
277 # ax_heatmap.set_xticks(np.arange(self._dfs.shape[0]))
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
278 # ax_heatmap.set_xticklabels(xlabels,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
279 # rotation=90, minor=False)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
280 # ax_heatmap.tick_params(axis='x', which='major', pad=3)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
281 #
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
282 # # Hide the small bars of ticks
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
283 # for tick in self._ax.xaxis.get_major_ticks():
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
284 # tick.tick1On = False
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
285 # tick.tick2On = False
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
286 # # # end of def