Skip to content

Instantly share code, notes, and snippets.

@syntagmatic
Forked from anonymous/index.html
Last active December 14, 2015 06:59
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 syntagmatic/5047619 to your computer and use it in GitHub Desktop.
Save syntagmatic/5047619 to your computer and use it in GitHub Desktop.
Polar Hover
<!DOCTYPE html>
<title>Polar Hover Effect</title>
<script src="http://d3js.org/d3.v3.min.js"></script>
<style type="text/css">
path {
fill: none;
stroke: black;
stroke-width: 2px;
}
.axis text {
font: 13px sans-serif;
}
.axis line,
.axis circle {
fill: none;
stroke: #777;
stroke-dasharray: 1,4;
}
.line {
fill: none;
stroke: red;
stroke-width: 1.5px;
}
</style>
<body>
<div id="graph1"></div>
<script type="text/javascript">
var w = 960,
h = 500,
p = 20,
rayon = 190;
var data = d3.range(0, 24, .001).map(function(x) {
return[x, 145+12*Math.cos((2*Math.PI/24)*(3*x-14))+14*Math.cos(5*(2*Math.PI/24)*(x-2))];
});
var rScale = d3.scale.linear()
.domain([120, 170])
.range([30, rayon ]);
var xScale = d3.scale.linear()
.domain([0, 24])
.range([0, 2*Math.PI]);
var svgLine2 = d3.svg.line.radial()
.radius(function(d) { return rScale(d[1]); })
.angle(function(d) { return xScale(d[0]); });
var vis2 = d3.select("#graph1")
.append("svg")
.attr("width", w)
.attr("height", h)
.attr("class", "graph")
.append("g")
.attr("transform", "translate(" + (w / 2 + p) + "," + (h / 2 - p) + ")")
.on("mousemove", mousemove2);
// background rect catches mouse interactions
// is there a simpler way to achieve this?
vis2.append("rect")
.attr("transform", "translate(" + -(w / 2 + p) + "," + -(h / 2 - p) + ")")
.attr("width", w+2*p)
.attr("height", h+2*p)
.style("fill", "transparent");
var gr = vis2.append("g")
.attr("class", "r axis")
.selectAll("g")
.data(rScale.ticks(10))
.enter().append("g");
gr.append("circle")
.attr("r", rScale);
gr.append("text")
.attr("y", function(d) { return -rScale(d) - 4; })
.attr("transform", "rotate(7)")
.style("text-anchor", "middle")
.text(function(d) { return d; });
var ga = vis2.append("g")
.attr("class", "a axis")
.selectAll("g")
.data(d3.range(0, 360, 15))
.enter().append("g")
.attr("transform", function(d) { return "rotate(" + (d-90) + ")"; });
ga.append("line")
.attr("x1", 30)
.attr("x2", rayon);
ga.append("text")
.attr("x", rayon + 6)
.attr("dy", ".35em")
.style("text-anchor", function(d) { return d > 180 && d < 360 ? "end" : null; })
.attr("transform", function(d) { return d > 180 && d < 360 ? "rotate(180 " + (rayon + 6) + ",0)" : null; })
.text(function(d) { return d/15 + "hr"; });
var line2 = vis2.append("path")
.datum(data)
.attr("class", "line")
.attr("d", svgLine2);
var circleguide2 = vis2.append("circle")
.attr("cx", 0)
.attr("cy", 0)
.attr("r", 0)
.attr("fill", "green");
function mousemove2() {
var mouse = d3.mouse(this);
var mx = mouse[0];
var my = mouse[1];
var omega = Math.atan2(mx, my);
var index = Math.round(1000*(xScale.invert(-omega)+12));
var d = data[index];
var r = rScale(d[1]);
var nx = r*Math.sin(omega);
var ny = r*Math.cos(omega);
circleguide2.data(d).attr("opacity", 1)
.attr("cx", nx)
.attr("cy", ny)
.attr("r", 4)
.attr("fill", "skyblue")
.attr("stroke", "red")
};
</script>
</div>
</body>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment