Skip to content

Instantly share code, notes, and snippets.

@BrandonStroud
Last active February 25, 2016 16:57
Show Gist options
  • Save BrandonStroud/e10d740b453bdb44e07c to your computer and use it in GitHub Desktop.
Save BrandonStroud/e10d740b453bdb44e07c to your computer and use it in GitHub Desktop.
genome browser
[{
"name": "gene 1",
"start": 50,
"stop": 2000,
"direction": "forward"
},
{
"name": "gene 2",
"start": 2150,
"stop": 2900,
"direction": "reverse"
},
{
"name": "gene 3",
"start": 3000,
"stop": 4550,
"direction": "forward"
},
{
"name": "gene 3",
"start": 4700,
"stop": 7550,
"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>
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);
}
});
var svg = d3.select("body").append("svg").attr({height: 500,width: genomelength/10});
svg.append("rect")
.attr({x: 0, y: 100, width: genomelength/10, height: 30})
.style({"stroke-width": "2px", "fill": "white", "stroke": "black"});
d3.json("genes.json.txt", function(error, json) {
if (error) return console.warn(error);
var rects = svg.selectAll(".genes")
.data(json)
.enter()
.append("rect");
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({"stroke":"black", "stroke-width": "2px"})
.transition().delay(3000).duration(1000)
.attr("y", function (d) { return 70; })
.attr("height", function (d) {return 30;})
.attr("fill", function (d){
if (d.direction === "forward") {
return "green";
}
else {
return "blue";
}
});
});
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)"; });
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)"; });
var group3 = svg.selectAll(".c")
.data(tickMarks.onehundred)
.enter()
.append("g");
group3.append("rect")
.style({"fill": "black"})
.attr({x: 0, y: 115, width: "1px", height: 15})
.transition().duration(1000)
.attr("transform", function (d) { return "translate(" + d/10 + ",0)";})
</script>
</body>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment