clustergrammer
Version:
This is a clustergram implemented in D3.js. I started from the example http://bost.ocks.org/mike/miserables/ and added the following features
80 lines (62 loc) • 2.14 kB
JavaScript
var draw_up_tile = require('../enter/draw_up_tile');
var draw_dn_tile = require('../enter/draw_dn_tile');
var fine_position_tile = require('../matrix/fine_position_tile');
module.exports = function resize_row_tiles(params, svg_group){
var row_nodes_names = params.network_data.row_nodes_names;
if (params.viz.ds_level === -1){
// no downsampling
///////////////////////
// resize rows
svg_group.selectAll('.row')
.attr('transform', function(d){
var tmp_index = _.indexOf(row_nodes_names, d.name);
var inst_y = params.viz.y_scale(tmp_index);
return 'translate(0,'+inst_y+')';
});
// resize tiles
svg_group.selectAll('.row')
.selectAll('.tile')
.attr('transform', function(d){
return fine_position_tile(params, d);
})
.attr('width', params.viz.rect_width)
.attr('height', params.viz.rect_height);
// resize tile_up
svg_group.selectAll('.row')
.selectAll('.tile_up')
.attr('d', function(){
return draw_up_tile(params);
})
.attr('transform', function(d) {
return fine_position_tile(params, d);
});
// resize tile_dn
svg_group.selectAll('.row')
.selectAll('.tile_dn')
.attr('d', function() {
return draw_dn_tile(params);
})
.attr('transform', function(d) {
return fine_position_tile(params, d);
});
} else {
// downsampling
/////////////////////////
var ds_level = params.viz.ds_level;
var row_class = '.ds'+ String(ds_level) + '_row';
var ds_rect_height = params.viz.ds[ds_level].rect_height;
svg_group.selectAll(row_class)
.attr('transform', function(d){
var inst_y = params.viz.ds[ds_level].y_scale(d.row_index);
return 'translate(0,'+inst_y+')';
});
// reset ds-tiles
svg_group.selectAll(row_class)
.selectAll('.tile')
.attr('transform', function(d){
return fine_position_tile(params, d);
})
.attr('width', params.viz.rect_width)
.attr('height', ds_rect_height);
}
};