Commit 2ee2acee1a876d02b0d164f779f85674840b6ca6
1 parent
701dbf83
Exists in
master
feat: continue with emission inequality plot
Showing
1 changed file
with
218 additions
and
224 deletions
Show diff stats
flaskr/static/js/plots/sorted-carbon-emissions.js renamed to flaskr/static/js/plots/sorted_emissions_inequality.js
1 | -// set the dimensions and margins of the graph | ||
2 | -let margin = {top: 30, right: 10, bottom: 62, left: 72}, | ||
3 | - width = 600 - margin.left - margin.right, | ||
4 | - height = 700 - margin.top - margin.bottom; | ||
5 | - | ||
6 | -function getTicks(maxValue, interval, startValue=0) | ||
7 | -{ | ||
8 | - let range = []; | ||
9 | - for (let i = startValue ; i <= maxValue ; i+=interval) | ||
10 | - { | ||
11 | - range.push(i); | 1 | +function draw_sorted_emissions_inequality(containerSelector, csvUrl) { |
2 | + | ||
3 | + // set the dimensions and margins of the graph | ||
4 | + let margin = {top: 30, right: 10, bottom: 62, left: 72}, | ||
5 | + width = 600 - margin.left - margin.right, | ||
6 | + height = 700 - margin.top - margin.bottom; | ||
7 | + | ||
8 | + function getTicks(maxValue, interval, startValue = 0) { | ||
9 | + let range = []; | ||
10 | + for (let i = startValue; i <= maxValue; i += interval) { | ||
11 | + range.push(i); | ||
12 | + } | ||
13 | + return range; | ||
12 | } | 14 | } |
13 | - return range; | ||
14 | -} | ||
15 | - | ||
16 | -function getBottomTicks(maxAttendeePercent) { | ||
17 | - return getTicks(maxAttendeePercent, 20); | ||
18 | -} | ||
19 | - | ||
20 | -function getLeftTicks(maxemissionsPercent) { | ||
21 | - return getTicks(maxemissionsPercent, 20); | ||
22 | -} | ||
23 | - | ||
24 | -function getSliceCollision(x, y, barSettings) | ||
25 | -{ | ||
26 | - let result = false; | ||
27 | - barSettings.forEach((element, index) => { | ||
28 | - if(x < element.rightBorder && x > element.leftBorder) | ||
29 | - { | ||
30 | - let binYDiff = element.topBorder - element.bottomBorder; | ||
31 | - let binXDiff = element.rightBorder - element.leftBorder; | ||
32 | - let binDiagonalAngle = Math.atan2(binYDiff , binXDiff); | ||
33 | - // let binYCenter = (element.topBorder + element.bottomBorder)/2; | ||
34 | - // let binXCenter = (element.rightBorder + element.leftBorder)/2; | ||
35 | - let mouseXDiff = element.rightBorder - x; | ||
36 | - let mouseYDiff = element.topBorder - y; | ||
37 | - let mouseToCenterAngle = Math.atan2(mouseYDiff , mouseXDiff); | ||
38 | - // console.log(binDiagonalAngle); | ||
39 | - // console.log(mouseToCenterAngle); | ||
40 | - | ||
41 | - if (mouseToCenterAngle < binDiagonalAngle ) | ||
42 | - { | ||
43 | - barSettings.forEach((element, index) => { | ||
44 | - if(y < element.topBorder && y > element.bottomBorder) | ||
45 | - { | ||
46 | - let lb = barSettings[index].leftBorder; | ||
47 | - let rb = barSettings[index].rightBorder; | ||
48 | - let tb = barSettings[index].topBorder; | ||
49 | - let bb = barSettings[index].bottomBorder; | ||
50 | - let binCollisionRatio = (y - bb) / (tb - bb); | ||
51 | - let otherAxisLevel = (rb - lb) * binCollisionRatio + lb; | ||
52 | - result = { | ||
53 | - binDiagonalAngle : binDiagonalAngle, | ||
54 | - isXDriving: false, | ||
55 | - binIndex: index, | ||
56 | - otherAxisLevel: otherAxisLevel | ||
57 | - }; | ||
58 | - | ||
59 | - } | ||
60 | - }); | 15 | + |
16 | + function getBottomTicks(maxAttendeePercent) { | ||
17 | + return getTicks(maxAttendeePercent, 20); | ||
18 | + } | ||
19 | + | ||
20 | + function getLeftTicks(maxemissionsPercent) { | ||
21 | + return getTicks(maxemissionsPercent, 20); | ||
22 | + } | ||
23 | + | ||
24 | + function getSliceCollision(x, y, barSettings) { | ||
25 | + let result = false; | ||
26 | + barSettings.forEach((element, index) => { | ||
27 | + if (x < element.rightBorder && x > element.leftBorder) { | ||
28 | + let binYDiff = element.topBorder - element.bottomBorder; | ||
29 | + let binXDiff = element.rightBorder - element.leftBorder; | ||
30 | + let binDiagonalAngle = Math.atan2(binYDiff, binXDiff); | ||
31 | + // let binYCenter = (element.topBorder + element.bottomBorder)/2; | ||
32 | + // let binXCenter = (element.rightBorder + element.leftBorder)/2; | ||
33 | + let mouseXDiff = element.rightBorder - x; | ||
34 | + let mouseYDiff = element.topBorder - y; | ||
35 | + let mouseToCenterAngle = Math.atan2(mouseYDiff, mouseXDiff); | ||
36 | + // console.log(binDiagonalAngle); | ||
37 | + // console.log(mouseToCenterAngle); | ||
38 | + | ||
39 | + if (mouseToCenterAngle < binDiagonalAngle) { | ||
40 | + barSettings.forEach((element, index) => { | ||
41 | + if (y < element.topBorder && y > element.bottomBorder) { | ||
42 | + let lb = barSettings[index].leftBorder; | ||
43 | + let rb = barSettings[index].rightBorder; | ||
44 | + let tb = barSettings[index].topBorder; | ||
45 | + let bb = barSettings[index].bottomBorder; | ||
46 | + let binCollisionRatio = (y - bb) / (tb - bb); | ||
47 | + let otherAxisLevel = (rb - lb) * binCollisionRatio + lb; | ||
48 | + result = { | ||
49 | + binDiagonalAngle: binDiagonalAngle, | ||
50 | + isXDriving: false, | ||
51 | + binIndex: index, | ||
52 | + otherAxisLevel: otherAxisLevel | ||
53 | + }; | ||
54 | + | ||
55 | + } | ||
56 | + }); | ||
61 | 57 | ||
62 | 58 | ||
63 | - } | ||
64 | - else | ||
65 | - { | ||
66 | - let lb = barSettings[index].leftBorder; | ||
67 | - let rb = barSettings[index].rightBorder; | ||
68 | - let tb = barSettings[index].topBorder; | ||
69 | - let bb = barSettings[index].bottomBorder; | ||
70 | - let binCollisionRatio = (x - lb) / (rb - lb); | ||
71 | - let otherAxisLevel = (tb - bb) * binCollisionRatio + bb; | ||
72 | - // console.log(otherAxisLevel); | ||
73 | - result = { | ||
74 | - binDiagonalAngle : binDiagonalAngle, | ||
75 | - isXDriving: true, | ||
76 | - binIndex: index, | ||
77 | - otherAxisLevel: otherAxisLevel | 59 | + } |
60 | + else { | ||
61 | + let lb = barSettings[index].leftBorder; | ||
62 | + let rb = barSettings[index].rightBorder; | ||
63 | + let tb = barSettings[index].topBorder; | ||
64 | + let bb = barSettings[index].bottomBorder; | ||
65 | + let binCollisionRatio = (x - lb) / (rb - lb); | ||
66 | + let otherAxisLevel = (tb - bb) * binCollisionRatio + bb; | ||
67 | + // console.log(otherAxisLevel); | ||
68 | + result = { | ||
69 | + binDiagonalAngle: binDiagonalAngle, | ||
70 | + isXDriving: true, | ||
71 | + binIndex: index, | ||
72 | + otherAxisLevel: otherAxisLevel | ||
73 | + } | ||
78 | } | 74 | } |
79 | } | 75 | } |
80 | - } | ||
81 | - }); | ||
82 | - return result; | ||
83 | - | ||
84 | -} | ||
85 | - | ||
86 | -function setupCursorBoxes(event, xScale, yScale, barSettings, vertical, horizontal, box) | ||
87 | -{ | ||
88 | - // mousex = d3.mouse(this); | ||
89 | - var x = d3.pointer(event)[0]; | ||
90 | - var y = d3.pointer(event)[1]; | ||
91 | - // var y = d3.event.pageY - document.getElementById(<id-of-your-svg>).getBoundingClientRect().y + 10 | ||
92 | - // x += 5; | ||
93 | - box.style("left", (x + 10) + "px"); | ||
94 | - box.style("top", (y - 20) + "px"); | ||
95 | - let xInGraph = xScale.invert(x - d3.selectAll("g.y.axis")._groups[0][0].getBoundingClientRect().right); | ||
96 | - let yInGraph = yScale.invert(y - margin.top ); | ||
97 | - | ||
98 | - | ||
99 | - | ||
100 | - // let sliceId = xScale.invert(x * 1.025 - d3.selectAll("g.yl.axis")._groups[0][0].getBoundingClientRect().x- margin.left)/500 +1; | ||
101 | - // let attendeePercent = (getAttendeeOnRight(sliceId, attendeeNumberPerGroup) / attendeeSum * 100.0).toFixed(1); | ||
102 | - if(x > width + d3.selectAll("g.y.axis")._groups[0][0].getBoundingClientRect().right || | ||
103 | - x < d3.selectAll("g.y.axis")._groups[0][0].getBoundingClientRect().right || | ||
104 | - y < margin.top +5 || | ||
105 | - y > d3.selectAll("g.x.axis")._groups[0][0].getBoundingClientRect().top) | ||
106 | - { | ||
107 | - vertical.style("width", 0); | ||
108 | - horizontal.style("height", 0); | ||
109 | - box.style("display", "none"); | 76 | + }); |
77 | + return result; | ||
78 | + | ||
110 | } | 79 | } |
111 | - else | ||
112 | - { | ||
113 | - vertical.style("width", "2px"); | ||
114 | - horizontal.style("height", "2px"); | ||
115 | - box.style("display", "inherit"); | ||
116 | - let sliceCollision = getSliceCollision(xInGraph, yInGraph, barSettings); | ||
117 | - // console.log(sliceCollision); | ||
118 | - if(sliceCollision) | ||
119 | - { | ||
120 | - if(sliceCollision.isXDriving) | ||
121 | - { | ||
122 | - | ||
123 | - vertical.style("left", x + "px" ); | ||
124 | - horizontal.style("top", yScale(sliceCollision.otherAxisLevel) + margin.top + "px"); | ||
125 | - | ||
126 | - box.text(xInGraph + " " + sliceCollision.otherAxisLevel); | ||
127 | - } | ||
128 | - else | ||
129 | - { | ||
130 | - horizontal.style("top", y + "px"); | ||
131 | - vertical.style("left", xScale(sliceCollision.otherAxisLevel) + d3.selectAll("g.y.axis")._groups[0][0].getBoundingClientRect().right + "px" ); | ||
132 | 80 | ||
133 | - box.text(sliceCollision.otherAxisLevel + " " + yInGraph); | ||
134 | - } | 81 | + function setupCursorBoxes(event, xScale, yScale, barSettings, vertical, horizontal, box) { |
82 | + // mousex = d3.mouse(this); | ||
83 | + const x = d3.pointer(event)[0]; | ||
84 | + const y = d3.pointer(event)[1]; | ||
85 | + // var y = d3.event.pageY - document.getElementById(<id-of-your-svg>).getBoundingClientRect().y + 10 | ||
86 | + // x += 5; | ||
87 | + box.style("left", (x + 10) + "px"); | ||
88 | + box.style("top", (y - 20) + "px"); | ||
89 | + let xInGraph = xScale.invert(x - margin.left); | ||
90 | + let yInGraph = yScale.invert(y - margin.top); | ||
91 | + | ||
92 | + | ||
93 | + // let sliceId = xScale.invert(x * 1.025 - d3.selectAll("g.yl.axis")._groups[0][0].getBoundingClientRect().x- margin.left)/500 +1; | ||
94 | + // let attendeePercent = (getAttendeeOnRight(sliceId, attendeeNumberPerGroup) / attendeeSum * 100.0).toFixed(1); | ||
95 | + if ( | ||
96 | + x < margin.left | ||
97 | + || | ||
98 | + x > width + margin.left | ||
99 | + || | ||
100 | + y < margin.top | ||
101 | + || | ||
102 | + y > height + margin.top | ||
103 | + ) { | ||
104 | + vertical.style("width", 0); | ||
105 | + horizontal.style("height", 0); | ||
106 | + box.style("display", "none"); | ||
135 | } | 107 | } |
108 | + else { | ||
109 | + vertical.style("width", "2px"); | ||
110 | + horizontal.style("height", "2px"); | ||
111 | + box.style("display", "inherit"); | ||
112 | + let sliceCollision = getSliceCollision(xInGraph, yInGraph, barSettings); | ||
113 | + // console.log(sliceCollision); | ||
114 | + if (sliceCollision) { | ||
115 | + if (sliceCollision.isXDriving) { | ||
116 | + vertical.style("left", x + "px"); | ||
117 | + horizontal.style("top", yScale(sliceCollision.otherAxisLevel) + margin.top + "px"); | ||
118 | + | ||
119 | + box.text(xInGraph + " " + sliceCollision.otherAxisLevel); | ||
120 | + } else { | ||
121 | + horizontal.style("top", y + "px"); | ||
122 | + vertical.style("left", xScale(sliceCollision.otherAxisLevel) + margin.right + "px"); | ||
123 | + | ||
124 | + box.text(sliceCollision.otherAxisLevel + " " + yInGraph); | ||
125 | + } | ||
126 | + } | ||
136 | 127 | ||
128 | + } | ||
129 | + // box.text(attendeePercent + " % of attendees"); | ||
130 | + // console.log(d3.selectAll("g.x.axis")._groups[0][0]); | ||
131 | + // console.log(d3.selectAll("g.x.axis")._groups[0][0].getBoundingClientRect().x); | ||
137 | } | 132 | } |
138 | - // box.text(attendeePercent + " % of attendees"); | ||
139 | - // console.log(d3.selectAll("g.x.axis")._groups[0][0]); | ||
140 | - // console.log(d3.selectAll("g.x.axis")._groups[0][0].getBoundingClientRect().x); | ||
141 | -} | ||
142 | - | ||
143 | -function addVerticalLineAndListenCursor(xScale, yScale, barSettings) { | ||
144 | - let vertical = d3.select("#chart-container") | ||
145 | - .append("div") | ||
146 | - .attr("class", "remove") | ||
147 | - .style("position", "absolute") | ||
148 | - .style("z-index", "19") | ||
149 | - .style("width", "2px") | ||
150 | - .style("height", (height) + "px") | ||
151 | - .style("top", (10 + margin.top) + "px") | ||
152 | - .style("bottom", "30px") | ||
153 | - .style("left", "0px") | ||
154 | - .style("background", "#000"); | ||
155 | - | ||
156 | - let horizontal = d3.select("#chart-container") | ||
157 | - .append("div") | ||
158 | - .attr("class", "remove") | ||
159 | - .style("position", "absolute") | ||
160 | - .style("z-index", "19") | ||
161 | - .style("width", (width) + "px") | ||
162 | - .style("height", "2px") | ||
163 | - .style("top", "0px") | ||
164 | - .style("bottom", "30px") | ||
165 | - .style("left", (10 + margin.left) + "px") | ||
166 | - .style("background", "#000"); | ||
167 | - | ||
168 | - let box = d3.select("#chart-container") | ||
169 | - .append("div") | ||
170 | - .attr("class", "remove") | ||
171 | - .style("position", "absolute") | ||
172 | - .style("z-index", "20") | ||
173 | - .style("width", "150px") | ||
174 | - .style("height", "44px") | ||
175 | - .style("top", "10px") | ||
176 | - .style("bottom", "30px") | ||
177 | - .style("left", "0px") | ||
178 | - .style("border", "1px solid grey") | ||
179 | - .style("background", "rgba(255, 255, 255, 0.7)"); | ||
180 | - | ||
181 | - d3.select("#chart-container") | ||
182 | - .on("mousemove", function(event){ | ||
183 | - setupCursorBoxes(event, xScale, yScale, barSettings, vertical, horizontal, box); | ||
184 | - }) | ||
185 | - .on("mouseover", function(event){ | ||
186 | - setupCursorBoxes(event, xScale, yScale, barSettings, vertical, horizontal, box); | ||
187 | - | ||
188 | - }); | ||
189 | -} | ||
190 | 133 | ||
134 | + function addVerticalLineAndListenCursor(xScale, yScale, barSettings) { | ||
135 | + let vertical = d3.select(containerSelector) | ||
136 | + .append("div") | ||
137 | + .attr("class", "no-pointer-events") | ||
138 | + .style("position", "absolute") | ||
139 | + .style("z-index", "19") | ||
140 | + .style("width", "2px") | ||
141 | + .style("height", (height) + "px") | ||
142 | + .style("top", (10 + margin.top) + "px") | ||
143 | + .style("bottom", "30px") | ||
144 | + .style("left", "0px") | ||
145 | + .style("background", "#000"); | ||
146 | + | ||
147 | + let horizontal = d3.select(containerSelector) | ||
148 | + .append("div") | ||
149 | + .attr("class", "no-pointer-events") | ||
150 | + .style("position", "absolute") | ||
151 | + .style("z-index", "19") | ||
152 | + .style("width", (width) + "px") | ||
153 | + .style("height", "2px") | ||
154 | + .style("top", "0px") | ||
155 | + .style("bottom", "30px") | ||
156 | + .style("left", (10 + margin.left) + "px") | ||
157 | + .style("background", "#000"); | ||
158 | + | ||
159 | + let box = d3.select(containerSelector) | ||
160 | + .append("div") | ||
161 | + .attr("class", "no-pointer-events") | ||
162 | + .style("position", "absolute") | ||
163 | + .style("z-index", "20") | ||
164 | + .style("width", "150px") | ||
165 | + .style("height", "44px") | ||
166 | + .style("top", "10px") | ||
167 | + .style("bottom", "30px") | ||
168 | + .style("left", "0px") | ||
169 | + .style("border", "1px solid grey") | ||
170 | + .style("background", "rgba(255, 255, 255, 0.7)"); | ||
171 | + | ||
172 | + d3.select(containerSelector) | ||
173 | + .on("mousemove", function (event) { | ||
174 | + setupCursorBoxes(event, xScale, yScale, barSettings, vertical, horizontal, box); | ||
175 | + }) | ||
176 | + .on("mouseover", function (event) { | ||
177 | + setupCursorBoxes(event, xScale, yScale, barSettings, vertical, horizontal, box); | ||
178 | + }); | ||
179 | + } | ||
191 | 180 | ||
192 | 181 | ||
193 | -document.onreadystatechange = () => { | ||
194 | - if (document.readyState === 'complete') { | 182 | + document.addEventListener("DOMContentLoaded", () => { |
183 | + width = Math.max(880, $(containerSelector).parent().width()); | ||
184 | + width = width - margin.left - margin.right; | ||
195 | let maxAttendeePercent = 100; | 185 | let maxAttendeePercent = 100; |
196 | let maxEmissionsPercent = 100; | 186 | let maxEmissionsPercent = 100; |
197 | - let svg = d3.select("#chart-container") | 187 | + let svg = d3.select(containerSelector) |
198 | .append("svg") | 188 | .append("svg") |
199 | .attr("id", "graph-svg") | 189 | .attr("id", "graph-svg") |
200 | .attr("width", width + margin.left + margin.right) | 190 | .attr("width", width + margin.left + margin.right) |
@@ -207,31 +197,29 @@ document.onreadystatechange = () => { | @@ -207,31 +197,29 @@ document.onreadystatechange = () => { | ||
207 | let attendeeNumberPerGroup = []; | 197 | let attendeeNumberPerGroup = []; |
208 | let emissionsSum = 0; | 198 | let emissionsSum = 0; |
209 | let attendeeSum = 0; | 199 | let attendeeSum = 0; |
210 | - let rows = []; | ||
211 | - d3.csv("2020-09-30_04_21_19_87a1.csv", function (data) { | ||
212 | - let trainAttendee = parseInt(data["train trips_amount"]); | ||
213 | - let planeAttendee = parseInt(data["plane trips_amount"]); | ||
214 | - if(trainAttendee === 0 && planeAttendee === 0) | ||
215 | - { | 200 | + let data = []; |
201 | + d3.csv(csvUrl, function (datum) { | ||
202 | + let trainAttendee = parseInt(datum["train trips_amount"]); | ||
203 | + let planeAttendee = parseInt(datum["plane trips_amount"]); | ||
204 | + if (trainAttendee === 0 && planeAttendee === 0) { | ||
216 | return; | 205 | return; |
217 | } | 206 | } |
218 | let attendeeNumber = trainAttendee + planeAttendee; | 207 | let attendeeNumber = trainAttendee + planeAttendee; |
219 | - let distance_km = data.distance_km / attendeeNumber; | ||
220 | - let co2_kg = parseFloat(data.co2_kg); | ||
221 | - if (co2_kg === "NaN" || distance_km === "NaN") | ||
222 | - { | 208 | + let distance_km = datum.distance_km / attendeeNumber; |
209 | + let co2_kg = parseFloat(datum.co2_kg); | ||
210 | + if (co2_kg === "NaN" || distance_km === "NaN") { | ||
223 | return; | 211 | return; |
224 | } | 212 | } |
225 | - rows.push(data); | 213 | + data.push(datum); |
226 | }).then((() => { | 214 | }).then((() => { |
227 | - rows.forEach((element, index) => { | ||
228 | - let trainAttendee = parseInt(element["train trips_amount"]); | ||
229 | - let planeAttendee = parseInt(element["plane trips_amount"]); | 215 | + data.forEach((datum, index) => { |
216 | + let trainAttendee = parseInt(datum["train trips_amount"]); | ||
217 | + let planeAttendee = parseInt(datum["plane trips_amount"]); | ||
230 | let attendeeNumber = trainAttendee + planeAttendee; | 218 | let attendeeNumber = trainAttendee + planeAttendee; |
231 | - element["emissions_per_capita"] = parseFloat(element.co2_kg) / attendeeNumber; | 219 | + datum["emissions_per_capita"] = parseFloat(datum.co2_kg) / attendeeNumber; |
232 | }); | 220 | }); |
233 | 221 | ||
234 | - rows.sort(function (a, b) { | 222 | + data.sort(function (a, b) { |
235 | if (a.emissions_per_capita > b.emissions_per_capita) { | 223 | if (a.emissions_per_capita > b.emissions_per_capita) { |
236 | return 1; | 224 | return 1; |
237 | } | 225 | } |
@@ -240,13 +228,13 @@ document.onreadystatechange = () => { | @@ -240,13 +228,13 @@ document.onreadystatechange = () => { | ||
240 | } | 228 | } |
241 | return 0; | 229 | return 0; |
242 | }); | 230 | }); |
243 | - console.log(rows); | 231 | + console.log(data); |
244 | let dataIndex = 0; | 232 | let dataIndex = 0; |
245 | - rows.forEach((element, index) => { | ||
246 | - let trainAttendee = parseInt(element["train trips_amount"]); | ||
247 | - let planeAttendee = parseInt(element["plane trips_amount"]); | 233 | + data.forEach((datum, index) => { |
234 | + let trainAttendee = parseInt(datum["train trips_amount"]); | ||
235 | + let planeAttendee = parseInt(datum["plane trips_amount"]); | ||
248 | let attendeeNumber = trainAttendee + planeAttendee; | 236 | let attendeeNumber = trainAttendee + planeAttendee; |
249 | - let co2_kg = parseFloat(element.co2_kg); | 237 | + let co2_kg = parseFloat(datum.co2_kg); |
250 | emissionsSum += co2_kg; | 238 | emissionsSum += co2_kg; |
251 | attendeeSum += attendeeNumber; | 239 | attendeeSum += attendeeNumber; |
252 | emissionsPerGroup[dataIndex] = emissionsSum; | 240 | emissionsPerGroup[dataIndex] = emissionsSum; |
@@ -263,7 +251,7 @@ document.onreadystatechange = () => { | @@ -263,7 +251,7 @@ document.onreadystatechange = () => { | ||
263 | //Title | 251 | //Title |
264 | svg.append("text") | 252 | svg.append("text") |
265 | .attr("transform", | 253 | .attr("transform", |
266 | - "translate(" + (70 + margin.left) + ", -12)") | 254 | + "translate(" + (70 + margin.left) + ", -12)") |
267 | .style("text-anchor", "middle") | 255 | .style("text-anchor", "middle") |
268 | .style("font-weight", "bold") | 256 | .style("font-weight", "bold") |
269 | .style("font-size", "130%") | 257 | .style("font-size", "130%") |
@@ -292,7 +280,7 @@ document.onreadystatechange = () => { | @@ -292,7 +280,7 @@ document.onreadystatechange = () => { | ||
292 | 280 | ||
293 | svg.append("text") | 281 | svg.append("text") |
294 | .attr("transform", | 282 | .attr("transform", |
295 | - "translate(" + (width/2) + " ," + | 283 | + "translate(" + (width / 2) + " ," + |
296 | (height + margin.top + 12) + ")") | 284 | (height + margin.top + 12) + ")") |
297 | .style("text-anchor", "middle") | 285 | .style("text-anchor", "middle") |
298 | .text("% of participants, sorted by per capita emission"); | 286 | .text("% of participants, sorted by per capita emission"); |
@@ -300,7 +288,7 @@ document.onreadystatechange = () => { | @@ -300,7 +288,7 @@ document.onreadystatechange = () => { | ||
300 | svg.append("text") | 288 | svg.append("text") |
301 | .attr("transform", "rotate(-90)") | 289 | .attr("transform", "rotate(-90)") |
302 | .attr("y", 0 - margin.left) | 290 | .attr("y", 0 - margin.left) |
303 | - .attr("x",0 - (height / 2)) | 291 | + .attr("x", 0 - (height / 2)) |
304 | .attr("dy", "1em") | 292 | .attr("dy", "1em") |
305 | .style("text-anchor", "middle") | 293 | .style("text-anchor", "middle") |
306 | .text("% of total emissions"); | 294 | .text("% of total emissions"); |
@@ -309,23 +297,21 @@ document.onreadystatechange = () => { | @@ -309,23 +297,21 @@ document.onreadystatechange = () => { | ||
309 | emissionsPerGroup.forEach((element, index) => { | 297 | emissionsPerGroup.forEach((element, index) => { |
310 | let bottomBorder; | 298 | let bottomBorder; |
311 | let leftBorder; | 299 | let leftBorder; |
312 | - if(index === 0) | ||
313 | - { | 300 | + if (index === 0) { |
314 | bottomBorder = 0; | 301 | bottomBorder = 0; |
315 | leftBorder = 0; | 302 | leftBorder = 0; |
316 | } | 303 | } |
317 | - else | ||
318 | - { | ||
319 | - bottomBorder = emissionsPerGroup[index-1] / emissionsSum * 100.0; | ||
320 | - leftBorder = attendeeNumberPerGroup[index-1] /attendeeSum * 100.0; | 304 | + else { |
305 | + bottomBorder = emissionsPerGroup[index - 1] / emissionsSum * 100.0; | ||
306 | + leftBorder = attendeeNumberPerGroup[index - 1] / attendeeSum * 100.0; | ||
321 | } | 307 | } |
322 | - barSettings[index]= | ||
323 | - { | ||
324 | - topBorder : emissionsPerGroup[index] / emissionsSum * 100.0, | ||
325 | - bottomBorder: bottomBorder, | ||
326 | - leftBorder : leftBorder, | ||
327 | - rightBorder : attendeeNumberPerGroup[index] / attendeeSum * 100.0, | ||
328 | - }; | 308 | + barSettings[index] = |
309 | + { | ||
310 | + topBorder: emissionsPerGroup[index] / emissionsSum * 100.0, | ||
311 | + bottomBorder: bottomBorder, | ||
312 | + leftBorder: leftBorder, | ||
313 | + rightBorder: attendeeNumberPerGroup[index] / attendeeSum * 100.0, | ||
314 | + }; | ||
329 | // console.log(index); | 315 | // console.log(index); |
330 | // console.log(barSettings[index]); | 316 | // console.log(barSettings[index]); |
331 | }); | 317 | }); |
@@ -335,13 +321,21 @@ document.onreadystatechange = () => { | @@ -335,13 +321,21 @@ document.onreadystatechange = () => { | ||
335 | .enter() | 321 | .enter() |
336 | .append("rect") | 322 | .append("rect") |
337 | .attr("x", 1) | 323 | .attr("x", 1) |
338 | - .attr("transform", function(d) { return "translate(" + x(d.leftBorder) + "," + y(d.topBorder) + ")"; }) | ||
339 | - .attr("width", function(d) { return x(d.rightBorder) - x(d.leftBorder) -1 ; }) | ||
340 | - .attr("height", function(d) { return (y(d.bottomBorder)- y(d.topBorder)); }) | 324 | + .attr("transform", function (d) { |
325 | + return "translate(" + x(d.leftBorder) + "," + y(d.topBorder) + ")"; | ||
326 | + }) | ||
327 | + .attr("width", function (d) { | ||
328 | + return x(d.rightBorder) - x(d.leftBorder) - 1; | ||
329 | + }) | ||
330 | + .attr("height", function (d) { | ||
331 | + return (y(d.bottomBorder) - y(d.topBorder)); | ||
332 | + }) | ||
341 | .style("z-index", "500") | 333 | .style("z-index", "500") |
342 | .style("fill", "#4444E5"); | 334 | .style("fill", "#4444E5"); |
343 | addVerticalLineAndListenCursor(x, y, barSettings); | 335 | addVerticalLineAndListenCursor(x, y, barSettings); |
344 | })); | 336 | })); |
345 | 337 | ||
346 | - } | ||
347 | -}; | ||
348 | \ No newline at end of file | 338 | \ No newline at end of file |
339 | + | ||
340 | + }); | ||
341 | + | ||
342 | +} | ||
349 | \ No newline at end of file | 343 | \ No newline at end of file |