HTMLcopy
1
<div id="container"></div>
CSScopy
8
1
html,
2
body,
3
#container {
4
width: 100%;
5
height: 100%;
6
margin: 0;
7
padding: 0;
8
}
JavaScriptcopy
x
1
var mapSeries;
2
var mapChart;
3
var tableCharts;
4
var dataSet;
5
var tableChart;
6
var populationChart;
7
var areaChart;
8
var houseSeatsChart;
9
10
anychart.onDocumentReady(function () {
11
// The data used in this sample can be obtained from the CDN
12
// https://cdn.anychart.com/samples/maps-in-dashboard/states-of-united-states-dashboard-with-multi-select/data.json
13
anychart.data.loadJsonFile(
14
'https://cdn.anychart.com/samples/maps-in-dashboard/states-of-united-states-dashboard-with-multi-select/data.json',
15
function (data) {
16
// pre-processing of the data
17
for (var i = 0; i < data.length; i++) {
18
data[i].value = new Date(data[i].statehood).getUTCFullYear();
19
data[i].short = data[i].id;
20
}
21
dataSet = anychart.data.set(data);
22
tableChart = getTableChart();
23
mapChart = drawMap();
24
tableCharts = getTableCharts();
25
26
// Setting layout table
27
var layoutTable = anychart.standalones.table();
28
layoutTable.cellBorder(null);
29
layoutTable.container('container');
30
layoutTable.draw();
31
32
function getTableChart() {
33
var table = anychart.standalones.table();
34
table.cellBorder(null);
35
table.fontSize(11).vAlign('middle').fontColor('#212121');
36
table
37
.getCell(0, 0)
38
.colSpan(8)
39
.fontSize(14)
40
.vAlign('bottom')
41
.border()
42
.bottom('1px #dedede')
43
.fontColor('#7c868e');
44
table
45
.useHtml(true)
46
.contents([
47
['Selected States Data'],
48
[
49
null,
50
'Name',
51
'Capital',
52
'Largest<br/>City',
53
'State<br/>Since',
54
'Population',
55
'Area',
56
'House<br/>Seats'
57
],
58
[null]
59
]);
60
table
61
.getRow(1)
62
.cellBorder()
63
.bottom('2px #dedede')
64
.fontColor('#7c868e');
65
table.getRow(0).height(45).hAlign('center');
66
table.getRow(1).height(35);
67
table.getCol(0).width(25);
68
table.getCol(1).hAlign('left');
69
table.getCol(2).hAlign('left');
70
table.getCol(3).hAlign('left');
71
table.getCol(2).width(50);
72
table.getCol(4).width(50);
73
table.getCol(5).width(50);
74
return table;
75
}
76
77
function solidChart(value) {
78
var gauge = anychart.gauges.circular();
79
gauge.data([value, 100]);
80
gauge.padding(5);
81
gauge.margin(0);
82
var axis = gauge.axis().radius(100).width(1).fill(null);
83
axis
84
.scale()
85
.minimum(0)
86
.maximum(100)
87
.ticks({ interval: 1 })
88
.minorTicks({ interval: 1 });
89
axis.labels().enabled(false);
90
axis.ticks().enabled(false);
91
axis.minorTicks().enabled(false);
92
93
var stroke = '1 #e5e4e4';
94
gauge
95
.bar(0)
96
.dataIndex(0)
97
.radius(80)
98
.width(40)
99
.fill('#64b5f6')
100
.stroke(null)
101
.zIndex(5);
102
gauge
103
.bar(1)
104
.dataIndex(1)
105
.radius(80)
106
.width(40)
107
.fill('#F5F4F4')
108
.stroke(stroke)
109
.zIndex(4);
110
gauge
111
.label()
112
.width('50%')
113
.height('25%')
114
.adjustFontSize(true)
115
.hAlign('center')
116
.anchor('center');
117
gauge
118
.label()
119
.hAlign('center')
120
.anchor('center')
121
.padding(5, 10)
122
.zIndex(1);
123
gauge.background().enabled(false);
124
gauge.fill(null);
125
gauge.stroke(null);
126
return gauge;
127
}
128
129
function getTableCharts() {
130
var table = anychart.standalones.table(2, 3);
131
table.cellBorder(null);
132
table.getRow(0).height(45);
133
table.getRow(1).height(25);
134
table.fontSize(11).useHtml(true).hAlign('center');
135
table
136
.getCell(0, 0)
137
.colSpan(3)
138
.fontSize(14)
139
.vAlign('bottom')
140
.border()
141
.bottom('1px #dedede');
142
table.getRow(1).cellBorder().bottom('2px #dedede');
143
populationChart = solidChart(0);
144
areaChart = solidChart(0);
145
houseSeatsChart = solidChart(0);
146
table.contents([
147
['Percentage of Total'],
148
['Population', 'Land Area', 'House Seats'],
149
[populationChart, areaChart, houseSeatsChart]
150
]);
151
return table;
152
}
153
154
function changeContent(ids) {
155
var i;
156
var contents = [
157
['List of Selected States'],
158
[
159
null,
160
'Name',
161
'State<br/>Since',
162
'Population',
163
'Water<br/>Area',
164
'House<br/>Seats'
165
]
166
];
167
var population = 0;
168
var area = 0;
169
var seats = 0;
170
for (i = 0; i < ids.length; i++) {
171
var data = getDataId(ids[i]);
172
population += parseInt(data.population);
173
area += parseInt(data.area);
174
seats += parseInt(data.house_seats);
175
176
var label = anychart.standalones.label();
177
label
178
.width('100%')
179
.height('100%')
180
.text('')
181
.background()
182
.enabled(true)
183
.fill({
184
src: data.flag,
185
mode: 'fit'
186
});
187
contents.push([
188
label,
189
data.name,
190
data.value,
191
parseInt(data.population).toLocaleString(),
192
Math.round(
193
(parseInt(data.water_area) * 100) /
194
(parseInt(data.water_area) + parseInt(data.land_area))
195
) + '%',
196
data.house_seats
197
]);
198
}
199
200
populationChart.data([
201
((population * 100) / getDataSum('population')).toFixed(2),
202
100
203
]);
204
populationChart
205
.label()
206
.text(
207
((population * 100) / getDataSum('population')).toFixed(2) +
208
'%'
209
);
210
211
areaChart.data([
212
((area * 100) / getDataSum('area')).toFixed(2),
213
100
214
]);
215
areaChart
216
.label()
217
.text(((area * 100) / getDataSum('area')).toFixed(2) + '%');
218
219
houseSeatsChart.data([
220
((seats * 100) / getDataSum('house_seats')).toFixed(2),
221
100
222
]);
223
houseSeatsChart
224
.label()
225
.text(
226
((seats * 100) / getDataSum('house_seats')).toFixed(2) + '%'
227
);
228
229
tableChart.contents(contents);
230
for (i = 0; i < ids.length; i++) {
231
tableChart.getRow(i + 2).maxHeight(35);
232
}
233
}
234
235
function drawMap() {
236
var map = anychart.map();
237
// set map title settings using html
238
map.title().padding(10, 0, 10, 0).margin(0).useHtml(true);
239
map.title(
240
'US States<br/>by the Year of Joining the Union' +
241
'<br/><span style="color:#212121; font-size: 11px;">Pick your state or a time period to see when chosen states joined</span>'
242
);
243
map.padding([0, 0, 10, 0]);
244
var credits = map.credits();
245
credits.enabled(true);
246
credits.url(
247
'https://en.wikipedia.org/wiki/List_of_states_and_territories_of_the_United_States'
248
);
249
credits.text(
250
'Data source: https://en.wikipedia.org/wiki/List_of_states_and_territories_of_the_United_States'
251
);
252
credits.logoSrc(
253
'https://en.wikipedia.org/static/favicon/wikipedia.ico'
254
);
255
256
// set map Geo data
257
map.geoData('anychart.maps.united_states_of_america');
258
259
map.listen('pointsSelect', function (e) {
260
var selected = [];
261
var selectedPoints = e.seriesStatus[0].points;
262
for (var i = 0; i < selectedPoints.length; i++) {
263
selected.push(selectedPoints[i].id);
264
}
265
changeContent(selected);
266
});
267
268
mapSeries = map.choropleth(dataSet);
269
mapSeries.labels(null);
270
mapSeries.tooltip().useHtml(true);
271
mapSeries.tooltip().title().useHtml(true);
272
mapSeries.tooltip().titleFormat(function () {
273
var data = getDataId(this.id);
274
return (
275
this.name +
276
'<span style="font-size: 10px"> (since ' +
277
data.statehood +
278
')</span>'
279
);
280
});
281
mapSeries.tooltip().format(function () {
282
var data = getDataId(this.id);
283
return (
284
'<span style="font-size: 12px; color: #b7b7b7">Capital: </span>' +
285
data.capital +
286
'<br/>' +
287
'<span style="font-size: 12px; color: #b7b7b7">Largest City: </span>' +
288
data.largest_city
289
);
290
});
291
var scale = anychart.scales.ordinalColor([
292
{ less: 1790 },
293
{ from: 1790, to: 1800 },
294
{ from: 1800, to: 1820 },
295
{ from: 1820, to: 1850 },
296
{ from: 1850, to: 1875 },
297
{ from: 1875, to: 1900 },
298
{ greater: 1900 }
299
]);
300
scale.colors([
301
'#81d4fa',
302
'#4fc3f7',
303
'#29b6f6',
304
'#039be5',
305
'#0288d1',
306
'#0277bd',
307
'#01579b'
308
]);
309
mapSeries.hovered().fill('#f06292');
310
mapSeries
311
.selected()
312
.fill('#c2185b')
313
.stroke(anychart.color.darken('#c2185b'));
314
mapSeries.colorScale(scale);
315
316
mapSeries.stroke(function () {
317
this.iterator.select(this.index);
318
var pointValue = this.iterator.get(this.referenceValueNames[1]);
319
var color = this.colorScale.valueToColor(pointValue);
320
return anychart.color.darken(color);
321
});
322
323
var colorRange = map.colorRange();
324
colorRange.enabled(true);
325
colorRange
326
.ticks()
327
.stroke('3 #ffffff')
328
.position('center')
329
.length(20)
330
.enabled(true);
331
colorRange.colorLineSize(5);
332
colorRange
333
.labels()
334
.fontSize(11)
335
.padding(0, 0, 0, 0)
336
.format(function () {
337
var range = this.colorRange;
338
var name;
339
if (isFinite(range.start + range.end)) {
340
name = range.start + ' - ' + range.end;
341
} else if (isFinite(range.start)) {
342
name = 'After ' + range.start;
343
} else {
344
name = 'Before ' + range.end;
345
}
346
return name;
347
});
348
return map;
349
}
350
351
// Creates general layout table with two inside layout tables
352
function fillInMainTable(flag) {
353
if (flag === 'wide') {
354
layoutTable.contents(
355
[
356
[mapChart, tableCharts],
357
[null, tableChart]
358
],
359
true
360
);
361
layoutTable.getCell(0, 0).rowSpan(2);
362
layoutTable.getRow(0).height(null);
363
layoutTable.getRow(1).height(null);
364
} else {
365
layoutTable.contents(
366
[[mapChart], [tableCharts], [tableChart]],
367
true
368
);
369
layoutTable.getRow(0).height(350);
370
layoutTable.getRow(1).height(200);
371
layoutTable.getRow(2).height(250);
372
}
373
layoutTable.draw();
374
}
375
376
if (window.innerWidth > 768) fillInMainTable('wide');
377
else {
378
fillInMainTable('slim');
379
}
380
mapSeries.select(12);
381
mapSeries.select(13);
382
mapSeries.select(14);
383
mapSeries.select(16);
384
changeContent(['US.IN', 'US.KY', 'US.IL', 'US.IA']);
385
386
// On resize changing layout to mobile version or conversely
387
window.onresize = function () {
388
if (layoutTable.colsCount() === 1 && window.innerWidth > 767) {
389
fillInMainTable('wide');
390
} else if (
391
layoutTable.colsCount() === 2 &&
392
window.innerWidth <= 767
393
) {
394
fillInMainTable('slim');
395
}
396
};
397
398
function getDataId(id) {
399
for (var i = 0; i < data.length; i++) {
400
if (data[i].id === id) return data[i];
401
}
402
}
403
404
function getDataSum(field) {
405
var result = 0;
406
for (var i = 0; i < data.length; i++) {
407
result += parseInt(data[i][field]);
408
}
409
return result;
410
}
411
}
412
);
413
});