var colors = { "protein coding" : d3.rgb('#A00000'), "pseudogene" : d3.rgb('#666666'), "processed transcript" : d3.rgb('#0033FF'), "ncRNA" : d3.rgb('#8B668B'), "antisense" : d3.rgb('#CBDD8B'), }; var biotype_to_legend = { "protein_coding" : "protein coding", "pseudogene" : "pseudogene", "processed_pseudogene" : "pseudogene", "processed_transcript" : "processed transcript", "miRNA" : "ncRNA", "lincRNA" : "ncRNA", "misc_RNA" : "ncRNA", "snoRNA" : "ncRNA", "snRNA" : "ncRNA", "rRNA" : "ncRNA", "antisense" : "antisense", "sense_intronic" : "antisense" }; var render = function (div) { // legend placeholder var legend_div = d3.select(div) .append("div") .attr("class", "tnt_legend_div"); legend_div .append("text") .text("Gene legend:"); // Gene track var gene_track = tnt.board.track() .height(200) .color("white") .display(tnt.board.track.feature.genome.gene() .color("#550055") ) .data(tnt.board.track.data.genome.gene()); d3.selectAll("tnt_biotype") .data(gene_track.data().elements()); // Get the default data updater... var gene_updater = gene_track.data().retriever(); // ... and create a new updater that calls the orig one + populates the legend dynamically gene_track.data().retriever (function (obj) { return gene_updater.call(gene_track, obj) .then (function (genes) { genes.map(gene_color); // And we setup/update the legend var biotypes_array = genes.map(function(e){ return biotype_to_legend[e.biotype]; }); var biotypes_hash = {}; for (var i=0; i