|
height = 300 |
|
width = 250 |
|
gap = 10 |
|
|
|
// overall svg |
|
svg = d3.select("body") |
|
.append("svg") |
|
.attr("id", "mainsvg") |
|
.attr("height", height) |
|
.attr("width", width*2 + gap) |
|
|
|
// first svg |
|
svg1 = d3.select("svg#mainsvg") |
|
.append("svg") |
|
.attr("id", "svg1") |
|
.attr("height", height) |
|
.attr("width", width) |
|
svg2 = d3.select("svg#mainsvg") |
|
.append("g") // group to move svg sideways |
|
.attr("transform", "translate(" + (width+gap) + ")") |
|
.append("svg") |
|
.attr("id", "svg2") |
|
.attr("height", height) |
|
.attr("width", width) |
|
|
|
// add a box around each SVG |
|
svg1.append("rect") |
|
.attr("height", height) |
|
.attr("width", width) |
|
.attr("stroke", "black") |
|
.attr("fill", "#ccc") |
|
.attr("stroke-width", 2) |
|
svg2.append("rect") |
|
.attr("height", height) |
|
.attr("width", width) |
|
.attr("stroke", "black") |
|
.attr("fill", "#ccc") |
|
.attr("stroke-width", 2) |
|
|
|
// simulate some data |
|
n_pts = 20 |
|
index = d3.range(n_pts) |
|
data = index.map(function(i) { |
|
x = Math.random()*(width-10)+5; |
|
y = x*0.3 + Math.random()*height/2; |
|
z = x*0.4 + Math.random()*height/2; |
|
return {x:x, y:y, z:z}; |
|
}) |
|
|
|
|
|
// plot y vs x in first plot |
|
svg1.selectAll("empty") |
|
.data(data) |
|
.enter() |
|
.append("circle") |
|
.attr("cx", function(d) { return d.x; }) |
|
.attr("cy", function(d) { return height-d.y+10; }) |
|
.attr("class", function(d,i) { return "pt" + i; }) |
|
.attr("r", 5) |
|
.attr("stroke", "black") |
|
.attr("fill", "slateblue") |
|
.on("mouseover", function(d, i) { |
|
console.log(i) |
|
d3.selectAll("circle.pt" + i) |
|
.attr("fill", "Orchid") |
|
.attr("r", 10) |
|
}) |
|
.on("mouseout", function(d, i) { |
|
d3.selectAll("circle.pt" + i) |
|
.attr("fill", "slateblue") |
|
.attr("r", 5) |
|
}) |
|
|
|
// plot z vs x in 2nd plot |
|
svg2.selectAll("empty") |
|
.data(data) |
|
.enter() |
|
.append("circle") |
|
.attr("cx", function(d) { return d.x; }) |
|
.attr("cy", function(d) { return height-d.z+10; }) |
|
.attr("class", function(d,i) { return "pt" + i; }) |
|
.attr("r", 5) |
|
.attr("stroke", "black") |
|
.attr("fill", "slateblue") |
|
.on("mouseover", function(d, i) { |
|
console.log(i) |
|
d3.selectAll("circle.pt" + i) |
|
.attr("fill", "Orchid") |
|
.attr("r", 10) |
|
}) |
|
.on("mouseout", function(d, i) { |
|
d3.selectAll("circle.pt" + i) |
|
.attr("fill", "slateblue") |
|
.attr("r", 5) |
|
}) |