@@ -29,6 +29,8 @@ dc.heatMap = function (parent, chartGroup) {
29
29
var _rowOrdering = d3 . ascending ;
30
30
var _colScale = d3 . scale . ordinal ( ) ;
31
31
var _rowScale = d3 . scale . ordinal ( ) ;
32
+ var _colAxis = d3 . svg . axis ( ) . orient ( 'bottom' ) ;
33
+ var _rowAxis = d3 . svg . axis ( ) . orient ( 'left' ) ;
32
34
33
35
var _xBorderRadius = DEFAULT_BORDER_RADIUS ;
34
36
var _yBorderRadius = DEFAULT_BORDER_RADIUS ;
@@ -185,6 +187,13 @@ dc.heatMap = function (parent, chartGroup) {
185
187
. append ( 'g' )
186
188
. attr ( 'class' , 'heatmap' )
187
189
. attr ( 'transform' , 'translate(' + _chart . margins ( ) . left + ',' + _chart . margins ( ) . top + ')' ) ;
190
+ _chartBody . append ( 'g' )
191
+ . attr ( 'class' , 'cols axis' )
192
+ . attr ( 'transform' , 'translate(0,' + _chart . effectiveHeight ( ) + ')' ) ;
193
+ _chartBody . append ( 'g' )
194
+ . attr ( 'class' , 'rows axis' ) ;
195
+ _colScale . rangeRoundBands ( [ 0 , _chart . effectiveWidth ( ) ] ) ;
196
+ _rowScale . rangeRoundBands ( [ _chart . effectiveHeight ( ) , 0 ] ) ;
188
197
189
198
return _chart . _doRedraw ( ) ;
190
199
} ;
@@ -202,17 +211,39 @@ dc.heatMap = function (parent, chartGroup) {
202
211
rows = _rowScale . domain ( rows ) ;
203
212
cols = _colScale . domain ( cols ) ;
204
213
205
- var rowCount = rows . domain ( ) . length ,
206
- colCount = cols . domain ( ) . length ,
207
- boxWidth = Math . floor ( _chart . effectiveWidth ( ) / colCount ) ,
208
- boxHeight = Math . floor ( _chart . effectiveHeight ( ) / rowCount ) ;
214
+ // Update axis
215
+ _colAxis . scale ( cols )
216
+ . tickFormat ( _chart . colsLabel ( ) ) ;
217
+ var _colAxisTransition = dc . transition ( _chartBody . select ( 'g.cols.axis' ) , _chart . transitionDuration ( ) , _chart . transitionDelay ( ) )
218
+ . call ( _colAxis ) ;
219
+ _rowAxis . scale ( rows )
220
+ . tickFormat ( _chart . rowsLabel ( ) ) ;
221
+ var _rowAxisTransition = dc . transition ( _chartBody . select ( 'g.rows.axis' ) , _chart . transitionDuration ( ) , _chart . transitionDelay ( ) )
222
+ . call ( _rowAxis ) ;
223
+ // We need the clicks added after the transition. Unfortunately, this is handled differently
224
+ // for selection/transition
225
+ if ( _colAxisTransition . duration || _rowAxisTransition . duration ) {
226
+ _colAxisTransition . each ( 'end' , function ( ) {
227
+ d3 . select ( this )
228
+ . selectAll ( 'g' )
229
+ . on ( 'click' , _chart . xAxisOnClick ( ) ) ;
230
+ } ) ;
231
+ _rowAxisTransition . each ( 'end' , function ( ) {
232
+ d3 . select ( this )
233
+ . selectAll ( 'g' )
234
+ . on ( 'click' , _chart . yAxisOnClick ( ) ) ;
235
+ } ) ;
236
+ } else {
237
+ _colAxisTransition . selectAll ( 'g' ) . on ( 'click' , _chart . xAxisOnClick ( ) ) ;
238
+ _rowAxisTransition . selectAll ( 'g' ) . on ( 'click' , _chart . yAxisOnClick ( ) ) ;
239
+ }
209
240
210
- cols . rangeRoundBands ( [ 0 , _chart . effectiveWidth ( ) ] ) ;
211
- rows . rangeRoundBands ( [ _chart . effectiveHeight ( ) , 0 ] ) ;
241
+ // Update boxes
242
+ var boxes = _chartBody . selectAll ( 'g.box-group' )
243
+ . data ( _chart . data ( ) , function ( d , i ) {
244
+ return _chart . keyAccessor ( ) ( d , i ) + '\0' + _chart . valueAccessor ( ) ( d , i ) ;
245
+ } ) ;
212
246
213
- var boxes = _chartBody . selectAll ( 'g.box-group' ) . data ( _chart . data ( ) , function ( d , i ) {
214
- return _chart . keyAccessor ( ) ( d , i ) + '\0' + _chart . valueAccessor ( ) ( d , i ) ;
215
- } ) ;
216
247
var gEnter = boxes . enter ( ) . append ( 'g' )
217
248
. attr ( 'class' , 'box-group' ) ;
218
249
@@ -232,45 +263,11 @@ dc.heatMap = function (parent, chartGroup) {
232
263
. attr ( 'rx' , _xBorderRadius )
233
264
. attr ( 'ry' , _yBorderRadius )
234
265
. attr ( 'fill' , _chart . getColor )
235
- . attr ( 'width' , boxWidth )
236
- . attr ( 'height' , boxHeight ) ;
266
+ . attr ( 'width' , _colScale . rangeBand ( ) )
267
+ . attr ( 'height' , _rowScale . rangeBand ( ) ) ;
237
268
238
269
boxes . exit ( ) . remove ( ) ;
239
270
240
- var gCols = _chartBody . select ( 'g.cols' ) ;
241
- if ( gCols . empty ( ) ) {
242
- gCols = _chartBody . append ( 'g' ) . attr ( 'class' , 'cols axis' ) ;
243
- }
244
- var gColsText = gCols . selectAll ( 'text' ) . data ( cols . domain ( ) ) ;
245
- gColsText . enter ( ) . append ( 'text' )
246
- . attr ( 'x' , function ( d ) { return cols ( d ) + boxWidth / 2 ; } )
247
- . style ( 'text-anchor' , 'middle' )
248
- . attr ( 'y' , _chart . effectiveHeight ( ) )
249
- . attr ( 'dy' , 12 )
250
- . on ( 'click' , _chart . xAxisOnClick ( ) )
251
- . text ( _chart . colsLabel ( ) ) ;
252
- dc . transition ( gColsText , _chart . transitionDuration ( ) , _chart . transitionDelay ( ) )
253
- . text ( _chart . colsLabel ( ) )
254
- . attr ( 'x' , function ( d ) { return cols ( d ) + boxWidth / 2 ; } )
255
- . attr ( 'y' , _chart . effectiveHeight ( ) ) ;
256
- gColsText . exit ( ) . remove ( ) ;
257
- var gRows = _chartBody . select ( 'g.rows' ) ;
258
- if ( gRows . empty ( ) ) {
259
- gRows = _chartBody . append ( 'g' ) . attr ( 'class' , 'rows axis' ) ;
260
- }
261
- var gRowsText = gRows . selectAll ( 'text' ) . data ( rows . domain ( ) ) ;
262
- gRowsText . enter ( ) . append ( 'text' )
263
- . attr ( 'dy' , 6 )
264
- . style ( 'text-anchor' , 'end' )
265
- . attr ( 'x' , 0 )
266
- . attr ( 'dx' , - 2 )
267
- . on ( 'click' , _chart . yAxisOnClick ( ) )
268
- . text ( _chart . rowsLabel ( ) ) ;
269
- dc . transition ( gRowsText , _chart . transitionDuration ( ) , _chart . transitionDelay ( ) )
270
- . text ( _chart . rowsLabel ( ) )
271
- . attr ( 'y' , function ( d ) { return rows ( d ) + boxHeight / 2 ; } ) ;
272
- gRowsText . exit ( ) . remove ( ) ;
273
-
274
271
if ( _chart . hasFilter ( ) ) {
275
272
_chart . selectAll ( 'g.box-group' ) . each ( function ( d ) {
276
273
if ( _chart . isSelectedNode ( d ) ) {
0 commit comments