Genome browser for phamerator.org
forked from scresawn's block: genome browser(testing1)
forked from Darius9's block: genome browser(testing1)
xxxxxxxxxx
<head>
<meta charset="utf-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
</head>
<body>
<script>
var svg = d3.select("body").append("svg").attr("height",1000);
d3.json("genes.json.txt", function(error, json) {
if (error) return console.warn(error);
svg.attr("width", function (d){
return d3.max(json, function (d){
return d.genomelength/10;
})
var rects = svg.selectAll(".genes")
.data(json)
.enter()
.append("rect");
var tickMarks = {thousand: [], fivehundred: [], onehundred: []};
var genome_positions = [];
for (var i = 1; i <= d.genomelength; i++) {genome_positions.push(i);}
genome_positions.forEach(function(currentValue, index, myArray){
if (currentValue % 1000 === 0) {tickMarks.thousand.push(currenValue);}
else if (currentValue % 500 === 0) {tickMarks.fivehundred.push(currentValue);}
else if (currentValue % 100 === 0) {tickMarks.onehundred.push(currentValue);}
})
var text= svg.selectAll (".text")
.data(json)
.enter()
.append("text");
var textLabels= text
.attr("x", function (d) { return ((d.stop+d.start)/10)/2; })
.attr("y", function (d) { return 90; })
.attr("y", function (d) {
if (d.direction==="forward"&& d.name%2!=0) { return 92;}
else if (d.direction==="forward" && d.name%2===0){return 62}
else if (d.direction==="reverse"&& d.name%2 !=0){return 182;}
else if (d.direction==="reverse"&&d.name%2 ===0){return 152}})
.text(function (d){return d.name})
.attr("font-family", "arial")
.attr("font-size", "20px")
.attr("text-anchor","middle")
.attr("fill", "purple");
var rectAttributes = rects
.attr("x", function (d) { return d.start/10; })
.attr("y", function (d) { return 100; })
.attr("height", function(d) { return 0;})
.attr("width", function (d) { return (d.stop-d.start)/10; })
.style({"fill": function (d) {
if (d.direction ==="reverse") {return "silver"}
else if (d.direction === "forward"){ return"gold"}},
"stroke":"black", "stroke-width": "2px"})
.attr("y", function (d) {
if (d.direction == "forward") {
if (d.name % 2 === 0) {
return 70;}
else { return 40;}}
else if (d.direction == "reverse") {
if (d.name % 2 === 0) {
return 160;}
else { return 130; }}})
.attr("x", function (d) {
if (d.direction === "forward") {
return (0 - ((d.stop-d.start)/10)) - 2;}
else if (d.direction === "reverse") {
return (d.genomelength/10) + 2;}})
.transition().delay(3000).duration(1000)
.attr("x", function (d) { return d.start/10; })
.attr("y", function (d) {
if (d.direction==="forward" && d.name%2 !=0) { return 70;}
else if (d.direction==="forward" && d.name%2===0){return 40}
else if (d.direction==="reverse"&&d.name%2 !=0){return 155;}
else if (d.direction==="reverse"&&d.name%2 ===0){return 130}})
.attr("height", function (d) {return 30;})
var group = svg.selectAll(".a")
.data(tickMarks.thousand)
.enter()
.append("g");
group.append("rect")
.style({"fill": "black"})
.attr({x: 0, y: 100, width: "1px", height: 30})
.transition().duration(3000)
.attr("transform", function (d) { return "translate(" + d/10 + ",0)"; });
group.append("text")
.text(function (d){return d/1000})
.attr({x: 3, y: 113, width: "1px", height: 30})
.attr("transform", function (d) { return "translate(" + d/10 + ",0)"; })
.attr("font-family", "sans-serif")
.attr("font-size", "15px")
.attr("text-anchor","start")
.attr("fill", "purple");
var group2 = svg.selectAll(".b")
.data(tickMarks.fivehundred)
.enter()
.append("g");
group2.append("rect")
.style({"fill": "black"})
.attr({x: 0, y: 100, width: "1px", height: 15})
.transition().duration(2000)
.attr("transform", function (d) { return "translate(" + d/10 + ",0)"; });
})})
</script>
</body>
https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js