Skip to content

Instantly share code, notes, and snippets.

@wilzbach
Created September 18, 2014 00:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wilzbach/d565d273969c79a1546c to your computer and use it in GitHub Desktop.
Save wilzbach/d565d273969c79a1546c to your computer and use it in GitHub Desktop.
requirebin sketch
var parser = require("biojs-io-newick").parse_nwk;
var canvas = document.createElement("canvas")
canvas.width = 500
canvas.height = 500
document.body.appendChild(canvas)
var context = canvas.getContext("2d")
context.lineWidth = 5;
context.font="16px Arial";
var res = parser("(homo_sapiens:1,(mus_musculus:2,danio_rerio:17):4);")
// parser config
var offsetX = 130;
var offsetY = 100;
var textOffsetX = 5;
var textOffsetY = 5;
function tree(el, config){
context.fillText(el.name, config.x + textOffsetY , config.y + textOffsetY);
// line to parent
context.beginPath(); context.moveTo(config.x - config.i * offsetX,config.y - offsetY);
context.lineTo(config.x ,config.y); context.stroke();
if(el.children === undefined) return
// iterate over all childs
for(var i=0; i<el.children.length;i++ ){
tree(el.children[i], {x: config.x + i * offsetX, i: i, y: config.y + offsetY});
}
}
// draw the tree
tree(res, {x:100,y:40});
require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){module.exports=parse_nhx=function(s){var ancestors=[];var tree={};var tokens=s.split(/\s*(;|\(|\)|\[|\]|,|:|=)\s*/);for(var i=0;i<tokens.length;i++){var token=tokens[i];switch(token){case"(":var subtree={};tree.children=[subtree];ancestors.push(tree);tree=subtree;break;case",":var subtree={};ancestors[ancestors.length-1].children.push(subtree);tree=subtree;break;case")":tree=ancestors.pop();break;case":":break;default:var x=tokens[i-1];if(x==")"||x=="("||x==","){tree.name=token}else if(x==":"){var test_type=typeof token;if(!isNaN(token)){tree.branch_length=parseFloat(token)}}else if(x=="="){var x2=tokens[i-2];switch(x2){case"D":tree.duplication=token;break;case"G":tree.gene_id=token;break;case"T":tree.taxon_id=token;break}}else{var test}}}return tree}},{}],2:[function(require,module,exports){module.exports=parse_newick=function(s){var ancestors=[];var tree={};var tokens=s.split(/\s*(;|\(|\)|,|:)\s*/);for(var i=0;i<tokens.length;i++){var token=tokens[i];switch(token){case"(":var subtree={};tree.children=[subtree];ancestors.push(tree);tree=subtree;break;case",":var subtree={};ancestors[ancestors.length-1].children.push(subtree);tree=subtree;break;case")":tree=ancestors.pop();break;case":":break;default:var x=tokens[i-1];if(x==")"||x=="("||x==","){tree.name=token}else if(x==":"){tree.branch_length=parseFloat(token)}}}return tree}},{}],"biojs-io-newick":[function(require,module,exports){module.exports.parse_nwk=require("./newick");module.exports.parse_nhx=require("./extended_newick")},{"./extended_newick":1,"./newick":2}]},{},[]);var parser=require("biojs-io-newick").parse_nwk;var canvas=document.createElement("canvas");canvas.width=500;canvas.height=500;document.body.appendChild(canvas);var context=canvas.getContext("2d");context.lineWidth=5;context.font="16px Arial";var res=parser("(homo_sapiens:1,(mus_musculus:2,danio_rerio:17):4);");var offsetX=130;var offsetY=100;var textOffsetX=5;var textOffsetY=5;function tree(el,config){context.fillText(el.name,config.x+textOffsetY,config.y+textOffsetY);context.beginPath();context.moveTo(config.x-config.i*offsetX,config.y-offsetY);context.lineTo(config.x,config.y);context.stroke();if(el.children===undefined)return;for(var i=0;i<el.children.length;i++){tree(el.children[i],{x:config.x+i*offsetX,i:i,y:config.y+offsetY})}}tree(res,{x:100,y:40});
{
"name": "requirebin-sketch",
"version": "1.0.0",
"dependencies": {
"biojs-io-newick": "0.0.4"
}
}
<style type='text/css'>html, body { margin: 0; padding: 0; border: 0; }
body, html { height: 100%; width: 100%; }</style>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment