annotate tools/myTools/bin/sfa/plot/heatmap.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 # -*- coding: utf-8 -*-
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
2
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
3 import matplotlib
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
4 import matplotlib.pyplot as plt
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
5 import seaborn as sns
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
6
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
7 from .base import BaseGridPlot
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
8
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
9
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
10 class Heatmap(BaseGridPlot):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
11
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
12 def __init__(self, df, *args, fmt='.3f',
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
13 cmap=None, vmin=0.0, vmax=1.0,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
14 annot=True, **kwargs):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
15
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
16 super().__init__(*args, **kwargs)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
17
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
18 # Set references for data objects
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
19 self._df = df # A dataFrame
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
20 sns.heatmap(self._df,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
21 ax=self._axes['base'],
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
22 annot=annot,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
23 fmt=fmt,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
24 annot_kws={"size": 10},
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
25 linecolor=self._colors['table_edge_color'],
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
26 vmin=vmin, vmax=vmax,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
27 cmap=cmap,
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
28 cbar_kws={"orientation": "vertical",
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
29 "pad": 0.02, })
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
30
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
31
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
32 self._qm = self._axes['heatmap'].collections[0]
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
33 #self._qm.set_edgecolor(self._colors['table_edge_color'])
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
34
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
35 # Change the labelsize
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
36 cb = self._qm.colorbar
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
37 cb.outline.set_linewidth(0.5)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
38 cb.outline.set_edgecolor(self._colors['table_edge_color'])
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
39 cb_ax_asp = cb.ax.get_aspect()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
40 cb.ax.set_aspect(cb_ax_asp * 2.0)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
41
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
42 # Remove inner lines
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
43 children = cb.ax.get_children()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
44 for child in children:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
45 if isinstance(child, matplotlib.collections.LineCollection):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
46 child.set_linewidth(0)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
47
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
48 self._axes['heatmap'].xaxis.tick_top()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
49 plt.xticks(rotation=90)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
50 plt.yticks(rotation=0)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
51
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
52 self._axes['heatmap'].tick_params(axis='x', which='major', pad=-2)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
53 self._axes['heatmap'].tick_params(axis='y', which='major', pad=3)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
54
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
55 # Hide axis labels
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
56 self._axes['heatmap'].set_xlabel('')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
57 self._axes['heatmap'].set_ylabel('')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
58
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
59 # Text element of the heatmap object
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
60 self._texts = []
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
61 ch = self._axes['heatmap'].get_children()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
62 for child in ch:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
63 if isinstance(child, matplotlib.text.Text):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
64 if child.get_text() != '':
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
65 self._texts.append(child)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
66
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
67 # Set default values using properties
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
68 self.row_tick_fontsize = 10
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
69 self.column_tick_fontsize = 10
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
70 self.colorbar_label_fontsize = 10
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
71 self.linewidth = 0.5
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
72
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
73 # end of __init__
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
74
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
75 def _set_colors(self, colors):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
76 """Assign default color values for heatmap and colorbar
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
77 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
78 self._set_default_color('table_edge_color', 'black')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
79 self._set_default_color('colorbar_edge_color', 'black')
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
80
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
81 def _create_axes(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
82 super()._create_axes()
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
83 ax = self._axes['base']
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
84 self._axes['heatmap'] = ax
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
85 #del self._axes['base']
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
86
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
87 # Properties
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
88 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
89 def text_fontsize(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
90 return self._text_fontsize
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
91
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
92 @text_fontsize.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
93 def text_fontsize(self, val):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
94 """Resize text fonts
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
95 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
96 self._text_fontsize = val
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
97 for t in self._texts:
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
98 t.set_fontsize(val)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
99
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
100 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
101 def column_tick_fontsize(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
102 return self._column_tick_fontsize
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
103
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
104 @column_tick_fontsize.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
105 def column_tick_fontsize(self, val):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
106 self._column_tick_fontsize = val
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
107 self._axes['heatmap'].tick_params(
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
108 axis='x',
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
109 which='major',
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
110 labelsize=self._column_tick_fontsize)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
111
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
112 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
113 def row_tick_fontsize(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
114 return self._row_tick_fontsize
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
115
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
116 @row_tick_fontsize.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
117 def row_tick_fontsize(self, val):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
118 self._row_tick_fontsize = val
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
119 self._axes['heatmap'].tick_params(
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
120 axis='y',
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
121 which='major',
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
122 labelsize=self._row_tick_fontsize)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
123
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
124 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
125 def colorbar_tick_fontsize(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
126 return self._colorbar_tick_fontsize
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
127
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
128 @colorbar_tick_fontsize.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
129 def colorbar_tick_fontsize(self, val):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
130 self._colorbar_tick_fontsize = val
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
131 self._qm.colorbar.ax.tick_params(axis='y', labelsize=val)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
132
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
133 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
134 def linewidth(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
135 return self._linewidth
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
136
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
137 @linewidth.setter
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
138 def linewidth(self, val):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
139 """Adjust the width of table lines
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
140 """
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
141 self._linewidth = val
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
142 self._qm.set_linewidth(self._linewidth)
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
143
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
144 # Read-only properties
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
145 @property
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
146 def colorbar(self):
7e5c71b2e71f Uploaded
laurenmarazzi
parents:
diff changeset
147 return self._qm.colorbar