Skip to content

Instantly share code, notes, and snippets.

@AdamBlaine1
Last active March 24, 2016 16:17
Show Gist options
  • Save AdamBlaine1/b61ce4102ee0662df40d to your computer and use it in GitHub Desktop.
Save AdamBlaine1/b61ce4102ee0662df40d to your computer and use it in GitHub Desktop.
The genome browser making multiples)
[{
"phageName":"Happy",
"genomelength":7800,
"genes":
[{
"name": 1,
"pham": 7,
"sequence": "ATGCTACGTAGCTACGTACGATCGTACGATCGATCGTACG",
"start": 50,
"stop": 2000,
"direction": "forward"
},
{
"name": 2,
"pham": 201,
"sequence": "GACTGACTGACTAGCTGACTGATCGTACTCGAT",
"start": 2150,
"stop": 2900,
"direction": "reverse"
},
{
"name": 3,
"pham": 90,
"sequence": "ATCGTACGTACGTACGTACGATCGTACGATCGCGCGCGCGGCGCATCGATCGATCGTACTA",
"start": 3000,
"stop": 4550,
"direction": "reverse"
},
{
"name": 4,
"pham": 3752,
"sequence": "TTCTAGTCGATCGTACGTGTACGTGCATTATTGATGCTATATATCGTATATACGTA",
"start": 4700,
"stop": 7550,
"direction": "forward"
}
]},
{
"phageName":"Happy",
"genomelength":7800,
"genes":
[{
"name": 1,
"pham": 7,
"sequence": "ATGCTACGTAGCTACGTACGATCGTACGATCGATCGTACG",
"start": 50,
"stop": 2000,
"direction": "forward"
},
{
"name": 2,
"pham": 201,
"sequence": "GACTGACTGACTAGCTGACTGATCGTACTCGAT",
"start": 2150,
"stop": 2900,
"direction": "reverse"
},
{
"name": 3,
"pham": 90,
"sequence": "ATCGTACGTACGTACGTACGATCGTACGATCGCGCGCGCGGCGCATCGATCGATCGTACTA",
"start": 3000,
"stop": 4550,
"direction": "reverse"
},
{
"name": 4,
"pham": 3752,
"sequence": "TTCTAGTCGATCGTACGTGTACGTGCATTATTGATGCTATATATCGTATATACGTA",
"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>
<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto+Slab:400,100,300,700">
<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:400,100,100italic,300,300italic,400italic,500,500italic,700,700italic,900,900italic">
<style>
body {
font: 20px sans-serif;
}
.axis path,
.axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
.bar {
fill: orange;
}
.bar:hover {
fill: orangered ;
}
.x.axis path {
display: none;
}
.d3-tip {
line-height: 1;
font-weight: bold;
padding: 12px;
background: rgba(0, 0, 0, 0.8);
color: #fff;
border-radius: 2px;
}
/* Creates a small triangle extender for the tooltip */
.d3-tip:after {
box-sizing: border-box;
display: inline;
font-size: 10px;
width: 100%;
line-height: 1;
color: rgba(0, 0, 0, 0.8);
content: "\25BC";
position: absolute;
text-align: center;
}
/* Style northward tooltips differently */
.d3-tip.n:after {
margin: -1px 0 0 0;
top: 100%;
left: 0;
}
</style>
</head>
<body>
<script src="http://labratrevenge.com/d3-tip/javascripts/d3.tip.v0.6.3.js"></script>
<script>
// Feel free to change or delete any of the code you see!
var svg = d3.select("body").append("svg").attr({height: 500,width: })
d3.json("genes.json.txt", function(error, json) {
if (error) return console.warn(error);
var genomes = svg.selectAll(".genomes")
.data(json)
.enter()
.append("g");
var ruler = genomes.selectAll("genes")
svg.append("rect")
.attr({x: 0, y: 100, width: genomelength/10, height: 30})
.style({"stroke-width": "2px", "fill": "white", "stroke": "black"})
.attr("stroke-opacity", 0)
.transition().duration(1000)
.attr("stroke-opacity", 1);
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 tip = d3.tip()
.attr('class', 'd3-tip')
.offset([-10, 0])
.html(function(d) {
return "<strong>Name:</strong> <span style='color:red'>" + d.name + "</span>";
})
svg.call(tip);
genes.append("rect")
.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 (genomelength/10) + 2;
}
})
.attr("height", function (d) {return 30;})
.on('mouseover', tip.show)
.on('mouseout', tip.hide)
.attr("width", function (d) { return (d.stop-d.start)/10; })
.style({"stroke":"black", "stroke-width": "2px"})
.attr("fill", function (d) {
if (d.direction == "forward") {
return "green";
}
else if (d.direction == "reverse") {
return "red";
}
else {
return "black";
}
})
.transition().delay(1000).duration(1500).attr("x", function (d) { return d.start/10; });
genes.append("text") // gene name
.attr("x", function(d) { return ((d.start + d.stop)/2)/10;})
.attr("y", function (d) {
if (d.direction == "forward") {
if (d.name % 2 === 0) {
return 90;
}
else { return 60;}
}
else if (d.direction == "reverse") {
if (d.name % 2 === 0) {
return 180;
}
else { return 150;}
}
})
.style({"text-anchor": "middle", "fill": "black"})
.attr("font-family", "sans-serif")
.text(function(d) {return d.name})
.attr("fill-opacity", 0)
.transition().delay(2000).duration(1500)
.attr("fill-opacity", 1);
genes.append("text") // pham name
.attr("x", function(d) {
return ((d.start + d.stop)/2)/10;
})
.attr("y", function (d) {
if (d.direction == "forward") {
if (d.name % 2 === 0) {
return 60;
}
else { return 30;}
}
else if (d.direction == "reverse") {
if (d.name % 2 === 0) {
return 210;
}
else { return 180;}
}
})
.style({"text-anchor": "middle", "fill": "black"})
.attr("font-family", "sans-serif")
.text(function(d) {
return d.pham
})
.attr("fill-opacity", 0)
.transition().delay(3500).duration(1500)
.attr("fill-opacity", 1);
var group = svg.selectAll(".thousandticks")
.data(tickMarks.thousand)
.enter()
.append("g");
group.append("rect")
.style({"fill": "black"})
//.attr({x: 0, y: 100, width: "1px", height: 30})
.attr({x: function (d) { return d/10; }, y: 100, width: "1px", height: 30})
.attr({"fill-opacity": 0})
.transition().duration(1500)
.attr({"fill-opacity": 1});
//.attr("transform", function (d) { return "translate(" + d/10 + ",0)"; });
group.append("text") //green letters in boxes
.attr("x", function(d) {return (d/10) + 3;})
.attr("y", (90) + 22)
.attr("font-family", "sans-serif")
.attr("font-size", "14px")
.attr("fill", "green")
.style("text-anchor", "start")
.text(function(d) { return d/1000; })
.attr({"fill-opacity": 0})
.transition().duration(1500)
.attr({"fill-opacity": 1});
var group2 = svg.selectAll(".fivehundredticks")
.data(tickMarks.fivehundred)
.enter()
.append("g");
group2.append("rect")
.style({"fill": "black"})
.attr({x: function(d) {return d/10;}, y: 100, width: "1px", height: 15})
.attr({"fill-opacity": 0})
.transition().duration(1500)
.attr({"fill-opacity": 1});
//.attr("transform", function (d) { return "translate(" + d/10 + ",0)"; });
var group3 = svg.selectAll(".onehundredticks")
.data(tickMarks.onehundred)
.enter()
.append("g");
group3.append("rect")
.style({"fill": "black"})
.attr({x: function (d) { return d/10; }, y: 115, width: "1px", height: 15})
.attr("fill-opacity", 0)
.transition().duration(1500)
.attr("fill-opacity", 1);
});
//.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