xxxxxxxxxx
1
2
<div style="width:75%;">
3
<canvas id="canvas"></canvas>
4
</div>
5
<br>
6
<br>
7
<button id="randomizeData">Randomize Data</button>
1
1
xxxxxxxxxx
1
'use strict';
2
3
window.chartColors = {
4
red: 'rgb(255, 99, 132)',
5
orange: 'rgb(255, 159, 64)',
6
yellow: 'rgb(255, 205, 86)',
7
green: 'rgb(75, 192, 192)',
8
blue: 'rgb(54, 162, 235)',
9
purple: 'rgb(153, 102, 255)',
10
grey: 'rgb(201, 203, 207)'
11
};
12
13
(function(global) {
14
var MONTHS = [
15
'January',
16
'February',
17
'March',
18
'April',
19
'May',
20
'June',
21
'July',
22
'August',
23
'September',
24
'October',
25
'November',
26
'December'
27
];
28
29
var COLORS = [
30
'#4dc9f6',
31
'#f67019',
32
'#f53794',
33
'#537bc4',
34
'#acc236',
35
'#166a8f',
36
'#00a950',
37
'#58595b',
38
'#8549ba'
39
];
40
41
var Samples = global.Samples || (global.Samples = {});
42
var Color = global.Color;
43
44
Samples.utils = {
45
// Adapted from http://indiegamr.com/generate-repeatable-random-numbers-in-js/
46
srand: function(seed) {
47
this._seed = seed;
48
},
49
50
rand: function(min, max) {
51
var seed = this._seed;
52
min = min === undefined ? 0 : min;
53
max = max === undefined ? 1 : max;
54
this._seed = (seed * 9301 + 49297) % 233280;
55
return min + (this._seed / 233280) * (max - min);
56
},
57
58
numbers: function(config) {
59
var cfg = config || {};
60
var min = cfg.min || 0;
61
var max = cfg.max || 1;
62
var from = cfg.from || [];
63
var count = cfg.count || 8;
64
var decimals = cfg.decimals || 8;
65
var continuity = cfg.continuity || 1;
66
var dfactor = Math.pow(10, decimals) || 0;
67
var data = [];
68
var i, value;
69
70
for (i = 0; i < count; ++i) {
71
value = (from[i] || 0) + this.rand(min, max);
72
if (this.rand() <= continuity) {
73
data.push(Math.round(dfactor * value) / dfactor);
74
} else {
75
data.push(null);
76
}
77
}
78
79
return data;
80
},
81
82
labels: function(config) {
83
var cfg = config || {};
84
var min = cfg.min || 0;
85
var max = cfg.max || 100;
86
var count = cfg.count || 8;
87
var step = (max - min) / count;
88
var decimals = cfg.decimals || 8;
89
var dfactor = Math.pow(10, decimals) || 0;
90
var prefix = cfg.prefix || '';
91
var values = [];
92
var i;
93
94
for (i = min; i < max; i += step) {
95
values.push(prefix + Math.round(dfactor * i) / dfactor);
96
}
97
98
return values;
99
},
100
101
months: function(config) {
102
var cfg = config || {};
103
var count = cfg.count || 12;
104
var section = cfg.section;
105
var values = [];
106
var i, value;
107
108
for (i = 0; i < count; ++i) {
109
value = MONTHS[Math.ceil(i) % 12];
110
values.push(value.substring(0, section));
111
}
112
113
return values;
114
},
115
116
color: function(index) {
117
return COLORS[index % COLORS.length];
118
},
119
120
transparentize: function(color, opacity) {
121
var alpha = opacity === undefined ? 0.5 : 1 - opacity;
122
return Color(color).alpha(alpha).rgbString();
123
}
124
};
125
126
// DEPRECATED
127
window.randomScalingFactor = function() {
128
return Math.round(Samples.utils.rand(-100, 100));
129
};
130
131
// INITIALIZATION
132
133
Samples.utils.srand(Date.now());
134
135
// Google Analytics
136
/* eslint-disable */
137
if (document.location.hostname.match(/^(www\.)?chartjs\.org$/)) {
138
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
139
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
140
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
141
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
142
ga('create', 'UA-28909194-3', 'auto');
143
ga('send', 'pageview');
144
}
145
/* eslint-enable */
146
147
}(this));
148
149
150
var randomScalingFactor = function() {
151
return Math.round(Math.random() * 100);
152
};
153
154
var datapoints = [0, 20, 20, 60, 60, 120, NaN, 180, 120, 125, 105, 110, 170];
155
var config = {
156
type: 'line',
157
data: {
158
labels: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
159
datasets: [{
160
label: 'Cubic interpolation (monotone)',
161
data: datapoints,
162
borderColor: window.chartColors.red,
163
backgroundColor: 'rgba(0, 0, 0, 0)',
164
fill: false,
165
cubicInterpolationMode: 'monotone'
166
}, {
167
label: 'Cubic interpolation (default)',
168
data: datapoints,
169
borderColor: window.chartColors.blue,
170
backgroundColor: 'rgba(0, 0, 0, 0)',
171
fill: false,
172
}, {
173
label: 'Linear interpolation',
174
data: datapoints,
175
borderColor: window.chartColors.green,
176
backgroundColor: 'rgba(0, 0, 0, 0)',
177
fill: false,
178
lineTension: 0
179
}]
180
},
181
options: {
182
responsive: true,
183
title: {
184
display: true,
185
text: 'Chart.js Line Chart - Cubic interpolation mode'
186
},
187
tooltips: {
188
mode: 'index'
189
},
190
scales: {
191
xAxes: [{
192
display: true,
193
scaleLabel: {
194
display: true
195
}
196
}],
197
yAxes: [{
198
display: true,
199
scaleLabel: {
200
display: true,
201
labelString: 'Value'
202
},
203
ticks: {
204
suggestedMin: -10,
205
suggestedMax: 200,
206
}
207
}]
208
}
209
}
210
};
211
212
window.onload = function() {
213
var ctx = document.getElementById('canvas').getContext('2d');
214
window.myLine = new Chart(ctx, config);
215
};
216
217
document.getElementById('randomizeData').addEventListener('click', function() {
218
for (var i = 0, len = datapoints.length; i < len; ++i) {
219
datapoints[i] = Math.random() < 0.05 ? NaN : randomScalingFactor();
220
}
221
window.myLine.update();
222
});
223
Console errors: 0