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
89 lines (80 loc) • 2.54 kB
JavaScript
var draw_up_tile = require('../enter/draw_up_tile');
var draw_dn_tile = require('../enter/draw_dn_tile');
var mouseover_tile = require('../matrix/mouseover_tile');
var mouseout_tile = require('../matrix/mouseout_tile');
var fine_position_tile = require('../matrix/fine_position_tile');
module.exports = function update_split_tiles(params, inp_row_data, row_selection, delays, duration, cur_row_tiles, tip){
// value split
var row_split_data = _.filter(inp_row_data, function(num){
return num.value_up != 0 || num.value_dn !=0 ;
});
// tile_up
var cur_tiles_up = d3.select(row_selection)
.selectAll('.tile_up')
.data(row_split_data, function(d){return d.col_name;});
// update split tiles_up
var update_tiles_up = cur_tiles_up
.on('mouseover', function(...args) {
mouseover_tile(params, this, tip, args);
})
.on('mouseout', function mouseout() {
mouseout_tile(params, this, tip);
});
if (delays.run_transition){
update_tiles_up
.transition().delay(delays.update).duration(duration)
.attr('d', function() {
return draw_up_tile(params);
})
.attr('transform', function(d) {
return fine_position_tile(params, d);
});
} else {
update_tiles_up
.attr('d', function() {
return draw_up_tile(params);
})
.attr('transform', function(d) {
return fine_position_tile(params, d);
});
}
// tile_dn
var cur_tiles_dn = d3.select(row_selection)
.selectAll('.tile_dn')
.data(row_split_data, function(d){return d.col_name;});
// update split tiles_dn
var update_tiles_dn = cur_tiles_dn
.on('mouseover', function(...args) {
mouseover_tile(params, this, tip, args);
})
.on('mouseout', function mouseout() {
mouseout_tile(params, this, tip);
});
if (delays.run_transition){
update_tiles_dn
.transition().delay(delays.update).duration(duration)
.attr('d', function() {
return draw_dn_tile(params);
})
.attr('transform', function(d) {
return fine_position_tile(params, d);
});
} else {
update_tiles_dn
.attr('d', function() {
return draw_dn_tile(params);
})
.attr('transform', function(d) {
return fine_position_tile(params, d);
});
}
// remove tiles when splitting is done
cur_row_tiles
.selectAll('.tile')
.each(function(d){
if ( Math.abs(d.value_up)>0 && Math.abs(d.value_dn)>0 ){
d3.select(this)
.remove();
}
});
};