Genome browser for phamerator.org
forked from scresawn's block: genome browser
forked from Smith5mr's block: genome browser
Genome browser for phamerator.org
forked from scresawn's block: genome browser
forked from Smith5mr's block: genome browser
genes = [ | |
{ | |
name: 'gene 1', | |
start: 50, | |
stop: 300, | |
direction: "forward" | |
}, | |
{ | |
name: 'gene 2', | |
start: 400, | |
stop: 950, | |
direction: "forward" | |
}, | |
{ | |
name: 'gene 3', | |
start: 4000, | |
stop: 5550, | |
direction: "forward" | |
} | |
]; |
<!DOCTYPE html> | |
<head> | |
<meta charset="utf-8"> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script> | |
</head> | |
<body> | |
<script> | |
genes = [ | |
{ | |
name: 'gene 1', | |
start: 50, | |
stop: 300, | |
direction: "forward" | |
}, | |
{ | |
name: 'gene 2', | |
start: 400, | |
stop: 950, | |
direction: "forward" | |
}, | |
{ | |
name: 'gene 3', | |
start: 4000, | |
stop: 5550, | |
direction: "forward" | |
} | |
]; | |
var svg = d3.select("body").append("svg") | |
.attr("width", 1000) | |
.attr("height", 200); | |
var rect = svg.selectAll("rect") | |
.data(genes) | |
.enter() | |
.append("rect"); | |
var rectAttributes = rect | |
.attr("x", function (d) { return d.start/10; }) | |
.attr("y", function (d) { return 30; }) | |
.attr("height", function (d) { return 10; }) | |
.attr("width", function (d) { return (d.stop-d.start)/10}) | |
.style("fill", function(d) { return "pink"; }); | |
var genomelength = 7800; | |
var tickMarks = {thousand: [], fivehundred: [], onehundred: []}; | |
var genome_positions = []; | |
for (var i = 1; i <= genomelength; i++) { | |
genome_positions.push(i); | |
} | |
genome_positions.forEach(function(currentValue, index, myArray){ | |
if (currentValue % 1000 === 0) { | |
tickMarks.thousand.push(currentValue); | |
} | |
else if (currentValue % 500 === 0) { | |
tickMarks.fivehundred.push(currentValue); | |
} | |
else if (currentValue % 100 === 0) { | |
tickMarks.onehundred.push(currentValue); | |
} | |
}); | |
svg.append("rect") | |
.attr({x: 0, y: 50, width: (genomelength) / 10, height: 30}) | |
.style({"stroke-width": "2px", "fill": "white", "stroke": "black"}); | |
console.log(tickMarks); | |
var group = svg.selectAll(".a") | |
.data(tickMarks.thousand) | |
.enter() | |
.append("g"); | |
group.append("rect") | |
.style({"fill": "black"}) | |
.attr({x: 0, y: 50, width: "1px", height: 30}) | |
.transition().duration(3000) | |
.attr("transform", function (d) { return "translate(" + d/10 + ",0)"; }); | |
var group2 = svg.selectAll(".b") | |
.data(tickMarks.fivehundred) | |
.enter() | |
.append("g"); | |
group2.append("rect") | |
.style({"fill": "black"}) | |
.attr({x: 0, y: 50, width: "1px", height: 16}) | |
.transition().duration(2000) | |
.attr("transform", function (d) { return "translate(" + d/10 + ",0)"; }); | |
var group3 = svg.selectAll(".c") | |
.data(tickMarks.onehundred) | |
.enter() | |
.append("g"); | |
group3.append("rect") | |
.style({"fill": "black"}) | |
.attr({x: 0, y: 63, width: "1px", height: 16}) | |
.transition().duration(1000) | |
.attr("transform", function (d) { return "translate(" + d/10 + ",0)"; }); | |
</script> | |
</body> | |