<script type="text/javascript">
var dataset = [];
var numDataPoints = 50;
var xRange = Math.random() * 1000;
var yRange = Math.random() * 1000;
for (let i = 0; i < numDataPoints; i++) {
let newNumber1 = Math.floor(Math.random() * xRange);
let newNumber2 = Math.floor(Math.random() * yRange);
dataset.push([newNumber1, newNumber2]);
}
var h = 300;
var w = 500;
var padding = 30;
// 规定数的格式,百分数加小数点后一位 12.5%
var formatAsPercentage = d3.format(".1%");
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
var xScale = d3.scaleLinear() // 生成比例尺
.domain([0, d3.max(dataset, function (d) {return d[0];})]) // 值域
.range([padding, w - padding * 2]); // 范围
var yScale = d3.scaleLinear() // 生成比例尺
.domain([0, d3.max(dataset, function (d) {return d[1];})]) // 值域
.range([h - padding, padding]);
var rScale = d3.scaleLinear()
.domain([0, d3.max(dataset, function (d) {return d[1];})])
.rangeRound([2, 5]);
svg.selectAll("circle")
.data(dataset)
.enter()
.append("circle")
.attr("cx", function (d) {
return xScale(d[0]);
})
.attr("cy", function (d) {
return yScale(d[1]);
})
.attr("r", function (d) {
return rScale(d[1]);
});
svg.selectAll("text")
.data(dataset)
.enter()
.append("text")
.text(function (d) {
return formatAsPercentage(d[0]) + "," + formatAsPercentage(d[1]);
})
.attr("x", function (d) {
return xScale(d[0]);
})
.attr("y", function (d) {
return yScale(d[1]);
})
.attr("font-family", "sans-serif")
.attr("font-size", "11px")
.attr("fill", "red");
/*var xAxis = d3.axisBottom()
.scale(xScale);
svg.append("g").call(xAxis);*/
// 生成坐标轴
svg.append("g")
.attr("class", "axis")
.call(d3.axisBottom()
.scale(xScale)) // 粗略射纸刻度线数量
.attr("transform", "translate(0, " + (h - padding) + ")");
svg.append("g")
.attr("class", "axis")
.call(d3.axisLeft()
.scale(yScale))
.attr("transform", "translate(" + padding + ")")
</script>
<style>
.axis path,
.axis line{
fill: none;
stroke: black;
shape-rendering: crispEdges;
}
.axis text{
font-family: sans-serif;
font-size: 11px;
}
</style>