如何在 D3 中使用 Opentip
How to use Opentip with D3
我正在尝试在使用 D3.js 映射数据的程序中利用 Opentip.js 的功能集。
我不知道如何将新的 Opentip 对象绑定到构成地图的未命名元素。
下面是一段代码摘录,说明了我正在采用的方法:
<script type="text/javascript">
var dataset = [[4,2,'Bob'], [5,7,'Sally'], [2,2,'Marvin']];
var width = 38;
var height = 38;
var margin = 20;
function giveX(d) { return d[0] * width + margin }
function giveY(d) { return d[1] * height + margin }
var mapdiv = d3.select("#map")
.append("svg")
.attr("height", 680)
.attr("width", 980)
.style('border', '1px solid black')
var pips = mapdiv.selectAll("circle")
.data(dataset)
.enter().append("circle")
.style("fill", "red")
.style("stroke", "black")
.attr("cx", function(d) {return giveX(d)})
.attr("cy", function(d) {return giveY(d)})
.attr("r", width/2)
</script>
Opentip 对象的构造函数只需要我提供一个元素标识符,但我不清楚如何引用动态创建的 "circle" 元素。
我已经尝试将代码附加到 selectAll() 调用,但没有成功。
这是一个使用 data-ot
属性的简单示例:
<!DOCTYPE html>
<html>
<head>
<script data-require="d3@4.0.0" data-semver="4.0.0" src="https://d3js.org/d3.v3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/opentip/2.4.6/downloads/opentip-native.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/opentip/2.4.6/css/opentip.css" rel="stylesheet" type="text/css" />
</head>
<body>
<script>
var svg = d3.select('body')
.append('svg')
.attr('width', 200)
.attr('height', 200);
svg.selectAll('circle')
.data(d3.range(10))
.enter()
.append('circle')
.attr('cx', function(d) { return Math.random() * 200 } )
.attr('cy', function(d) { return Math.random() * 200 } )
.attr('r', 10)
.style('fill', 'steelblue')
.attr("data-ot", function(d,i){
return "Circle " + i;
});
</script>
</body>
</html>
下面是一个使用构造函数的示例:
<!DOCTYPE html>
<html>
<head>
<script data-require="d3@4.0.0" data-semver="4.0.0" src="https://d3js.org/d3.v3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/opentip/2.4.6/downloads/opentip-native.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/opentip/2.4.6/css/opentip.css" rel="stylesheet" type="text/css" />
</head>
<body>
<script>
var svg = d3.select('body')
.append('svg')
.attr('width', 200)
.attr('height', 200);
svg.selectAll('circle')
.data(d3.range(10))
.enter()
.append('circle')
.attr('cx', function(d) { return Math.random() * 200 } )
.attr('cy', function(d) { return Math.random() * 200 } )
.attr('r', 10)
.style('fill', 'steelblue')
.each(function(d,i){
new Opentip(this).setContent("Circle " + i);
})
</script>
</body>
</html>
我正在尝试在使用 D3.js 映射数据的程序中利用 Opentip.js 的功能集。
我不知道如何将新的 Opentip 对象绑定到构成地图的未命名元素。
下面是一段代码摘录,说明了我正在采用的方法:
<script type="text/javascript">
var dataset = [[4,2,'Bob'], [5,7,'Sally'], [2,2,'Marvin']];
var width = 38;
var height = 38;
var margin = 20;
function giveX(d) { return d[0] * width + margin }
function giveY(d) { return d[1] * height + margin }
var mapdiv = d3.select("#map")
.append("svg")
.attr("height", 680)
.attr("width", 980)
.style('border', '1px solid black')
var pips = mapdiv.selectAll("circle")
.data(dataset)
.enter().append("circle")
.style("fill", "red")
.style("stroke", "black")
.attr("cx", function(d) {return giveX(d)})
.attr("cy", function(d) {return giveY(d)})
.attr("r", width/2)
</script>
Opentip 对象的构造函数只需要我提供一个元素标识符,但我不清楚如何引用动态创建的 "circle" 元素。
我已经尝试将代码附加到 selectAll() 调用,但没有成功。
这是一个使用 data-ot
属性的简单示例:
<!DOCTYPE html>
<html>
<head>
<script data-require="d3@4.0.0" data-semver="4.0.0" src="https://d3js.org/d3.v3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/opentip/2.4.6/downloads/opentip-native.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/opentip/2.4.6/css/opentip.css" rel="stylesheet" type="text/css" />
</head>
<body>
<script>
var svg = d3.select('body')
.append('svg')
.attr('width', 200)
.attr('height', 200);
svg.selectAll('circle')
.data(d3.range(10))
.enter()
.append('circle')
.attr('cx', function(d) { return Math.random() * 200 } )
.attr('cy', function(d) { return Math.random() * 200 } )
.attr('r', 10)
.style('fill', 'steelblue')
.attr("data-ot", function(d,i){
return "Circle " + i;
});
</script>
</body>
</html>
下面是一个使用构造函数的示例:
<!DOCTYPE html>
<html>
<head>
<script data-require="d3@4.0.0" data-semver="4.0.0" src="https://d3js.org/d3.v3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/opentip/2.4.6/downloads/opentip-native.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/opentip/2.4.6/css/opentip.css" rel="stylesheet" type="text/css" />
</head>
<body>
<script>
var svg = d3.select('body')
.append('svg')
.attr('width', 200)
.attr('height', 200);
svg.selectAll('circle')
.data(d3.range(10))
.enter()
.append('circle')
.attr('cx', function(d) { return Math.random() * 200 } )
.attr('cy', function(d) { return Math.random() * 200 } )
.attr('r', 10)
.style('fill', 'steelblue')
.each(function(d,i){
new Opentip(this).setContent("Circle " + i);
})
</script>
</body>
</html>