forked from slankas/VisualizationCode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfunction.html
More file actions
122 lines (105 loc) · 3.28 KB
/
Copy pathfunction.html
File metadata and controls
122 lines (105 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<!DOCTYPE html>
<!-- https://raw.githubusercontent.com/alignedleft/d3-book/master/chapter_08/07_axes_format.html -->
<html lang="en">
<head>
<meta charset="utf-8">
<title>D3: Test of formatted axis values</title>
<script src="https://d3js.org/d3.v5.js"></script>
<style type="text/css">
/* No style rules here yet */
</style>
</head>
<body>
<svg id="scattor" width="600" height="400"></svg>
</body>
<script type="text/javascript">
//Static dataset
var dataset = [
[5, 20], [480, 90], [250, 50], [100, 33], [330, 95],
[410, 12], [475, 44], [25, 67], [85, 21], [220, 88],
[600, 150]
];
/*
//Dynamic, random dataset
var dataset = []; //Initialize empty array
var numDataPoints = 50; //Number of dummy data points to create
var xRange = Math.random() * 1000; //Max range of new x values
var yRange = Math.random() * 1000; //Max range of new y values
for (var i = 0; i < numDataPoints; i++) { //Loop numDataPoints times
var newNumber1 = Math.floor(Math.random() * xRange); //New random integer
var newNumber2 = Math.floor(Math.random() * yRange); //New random integer
dataset.push([newNumber1, newNumber2]); //Add new number to array
}
*/
createScatterPlot("#scattor", dataset)
function createScatterPlot(chartID, dataset) {
var h = d3.select(chartID).style("height").replace("px", "")
var w = d3.select(chartID).style("width").replace("px", "")
var padding = 40;
//Create scale functions
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 aScale = d3.scaleSqrt()
.domain([0, d3.max(dataset, function(d) { return d[1]; })])
.range([0, 10]);
var formatAsPercentage = d3.format(".1%");
//Define X axis
var xAxis = d3.axisBottom()
.scale(xScale)
.ticks(5)
//.tickFormat(formatAsPercentage);
//Define Y axis
var yAxis = d3.axisLeft()
.scale(yScale)
.ticks(5)
// .tickFormat(formatAsPercentage);
//attach to the existing SVG element
var svg = d3.select("body").select(chartID)
//Create circles
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 aScale(d[1]);
});
//Create labels
svg.selectAll("text")
.data(dataset)
.enter()
.append("text")
.text(function(d) {
return d[0] + "," + 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");
//Create X axis
svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(0," + (h - padding) + ")")
.call(xAxis);
//Create Y axis
svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(" + padding + ",0)")
.call(yAxis);
}
</script>
</html>