@@ -215,6 +215,9 @@ def enum_get(etype: Type[E], name: str, default: E) -> E:
215215 return default
216216
217217
218+ FLT_MAX = np .finfo (np .float32 ).max
219+
220+
218221class OWHeatMap (widget .OWWidget ):
219222 name = "Heat Map"
220223 description = "Plot a data matrix heatmap."
@@ -303,7 +306,7 @@ def _():
303306 self .row_clustering_method = self .row_clustering .name
304307
305308 # set default settings
306- self .space_x = 10
309+ self .space_x = 3
307310
308311 self .colorSettings = None
309312 self .selectedSchemaIndex = 0
@@ -852,12 +855,13 @@ def setup_scene(self, parts, data):
852855 Col0 = 3
853856 LegendRow = 0
854857 # The column for the vertical dendrogram
855- DendrogramColumn = 0
858+ DendrogramColumn = 1
856859 # The row for the horizontal dendrograms
857860 DendrogramRow = 1
858861 RightLabelColumn = Col0 + M
859862 TopLabelsRow = 2
860- BottomLabelsRow = Row0 + 2 * N
863+ BottomLabelsRow = Row0 + N
864+ GroupTitleColumn = 0
861865
862866 widget .setLayout (grid )
863867
@@ -872,9 +876,9 @@ def setup_scene(self, parts, data):
872876 for i , rowitem in enumerate (parts .rows ):
873877 if rowitem .title :
874878 title = QGraphicsSimpleTextItem (rowitem .title , widget )
875- item = GraphicsSimpleTextLayoutItem (title , parent = grid )
876- item .setSizePolicy (QSizePolicy .Preferred , QSizePolicy .Fixed )
877- grid .addItem (item , Row0 + i * 2 , Col0 )
879+ item = GraphicsSimpleTextLayoutItem (title , orientation = Qt . Vertical , parent = grid )
880+ item .setSizePolicy (QSizePolicy .Fixed , QSizePolicy .Maximum )
881+ grid .addItem (item , Row0 + i , GroupTitleColumn , alignment = Qt . AlignCenter )
878882
879883 if rowitem .cluster :
880884 dendrogram = DendrogramWidget (
@@ -893,7 +897,7 @@ def setup_scene(self, parts, data):
893897 self .__select_by_cluster (item , partindex )
894898 )
895899
896- grid .addItem (dendrogram , Row0 + i * 2 + 1 , DendrogramColumn )
900+ grid .addItem (dendrogram , Row0 + i , DendrogramColumn )
897901 sort_i .append (np .array (leaf_indices (rowitem .cluster )))
898902 row_dendrograms [i ] = dendrogram
899903 else :
@@ -945,8 +949,8 @@ def setup_scene(self, parts, data):
945949 hw .set_show_averages (self .averages )
946950 hw .set_heatmap_data (X_part )
947951
948- grid .addItem (hw , Row0 + i * 2 + 1 , Col0 + j )
949- grid .setRowStretchFactor (Row0 + i * 2 + 1 , X_part .shape [0 ] * 100 )
952+ grid .addItem (hw , Row0 + i , Col0 + j )
953+ grid .setRowStretchFactor (Row0 + i , X_part .shape [0 ] * 100 )
950954 heatmap_row .append (hw )
951955 heatmap_widgets .append (heatmap_row )
952956
@@ -974,7 +978,7 @@ def setup_scene(self, parts, data):
974978 labelslist .setContentsMargins (0.0 , 0.0 , 0.0 , 0.0 )
975979 labelslist .setSizePolicy (QSizePolicy .Fixed , QSizePolicy .Expanding )
976980
977- grid .addItem (labelslist , Row0 + i * 2 + 1 , RightLabelColumn )
981+ grid .addItem (labelslist , Row0 + i , RightLabelColumn )
978982 grid .setAlignment (labelslist , Qt .AlignLeft )
979983 row_annotation_widgets .append (labelslist )
980984
@@ -1056,8 +1060,7 @@ def __update_size_constraints(self):
10561060 if mode == Qt .IgnoreAspectRatio :
10571061 # Reset the row height constraints ...
10581062 for i , hm_row in enumerate (self .heatmap_widget_grid ):
1059- layout .setRowMaximumHeight (3 + i * 2 + 1 , np .finfo (np .float32 ).max )
1060- layout .setRowPreferredHeight (3 + i * 2 + 1 , 0 )
1063+ layout .setRowMaximumHeight (3 + i , FLT_MAX )
10611064 # ... and resize to match the viewport, taking the minimum size
10621065 # into account
10631066 minsize = widget .minimumSize ()
@@ -1087,8 +1090,8 @@ def __update_size_constraints(self):
10871090 Qt .KeepAspectRatioByExpanding )
10881091
10891092 heights .append (hm_size .height ())
1090- layout .setRowMaximumHeight (3 + i * 2 + 1 , max (heights ))
1091- layout .setRowPreferredHeight (3 + i * 2 + 1 , max (heights ))
1093+ layout .setRowMaximumHeight (3 + i , max (heights ))
1094+ layout .setRowPreferredHeight (3 + i , max (heights ))
10921095
10931096 # set/update the widget's height
10941097 constraint = QSizeF (size .width (), - 1 )
@@ -1356,20 +1359,8 @@ def update_column_annotations(self):
13561359
13571360 for labelslist in self .col_annotation_widgets_top :
13581361 labelslist .setVisible (show_top )
1359-
1360- TopLabelsRow = 2
1361- Row0 = 3
1362- BottomLabelsRow = Row0 + 2 * len (self .heatmapparts .rows )
1363-
1364- layout = self .heatmap_scene .widget .layout ()
1365- layout .setRowMaximumHeight (TopLabelsRow , - 1 if show_top else 0 )
1366- layout .setRowSpacing (TopLabelsRow , - 1 if show_top else 0 )
1367-
13681362 for labelslist in self .col_annotation_widgets_bottom :
13691363 labelslist .setVisible (show_bottom )
1370-
1371- layout .setRowMaximumHeight (BottomLabelsRow , - 1 if show_top else 0 )
1372-
13731364 self .__fixup_grid_layout ()
13741365
13751366 def __select_by_cluster (self , item , dendrogramindex ):
@@ -1690,8 +1681,9 @@ def _update_pixmap(self):
16901681
16911682 self .heatmap_item .setMinimumSize (hmsize )
16921683 self .averages_item .setMinimumSize (avsize )
1693- self .heatmap_item .setPreferredSize (hmsize * 10 )
1694- self .averages_item .setPreferredSize (avsize * 10 )
1684+ size = QFontMetrics (self .font ()).lineSpacing ()
1685+ self .heatmap_item .setPreferredSize (hmsize * size )
1686+ self .averages_item .setPreferredSize (avsize * size )
16951687 self .layout ().invalidate ()
16961688
16971689 def cell_at (self , pos ):
@@ -1925,6 +1917,7 @@ def __init__(self, low, high, threshold_low, threshold_high, parent=None):
19251917 self .setSizePolicy (QSizePolicy .Expanding , QSizePolicy .Fixed )
19261918 self .__pixitem = GraphicsPixmapWidget (parent = self , scaleContents = True ,
19271919 aspectMode = Qt .IgnoreAspectRatio )
1920+ self .__pixitem .setSizePolicy (QSizePolicy .Ignored , QSizePolicy .Preferred )
19281921 self .__pixitem .setMinimumHeight (12 )
19291922 layout .addItem (self .__pixitem )
19301923 self .__update ()
0 commit comments