Files
dev-chiefworks f76abffdcd first commit
2022-05-31 16:21:53 -04:00

906 lines
32 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ------------------------------------------------------------------------------
*
* # Echarts - chart combinations
*
* Chart combination configurations
*
* Version: 1.0
* Latest update: August 1, 2015
*
* ---------------------------------------------------------------------------- */
$(function () {
// Set paths
// ------------------------------
require.config({
paths: {
echarts: 'assets/js/plugins/visualization/echarts'
}
});
// Configuration
// ------------------------------
require(
// Add necessary charts
[
'echarts',
'echarts/theme/limitless',
'echarts/chart/line',
'echarts/chart/bar',
'echarts/chart/pie',
'echarts/chart/scatter',
'echarts/chart/k',
'echarts/chart/radar',
'echarts/chart/gauge'
],
// Charts setup
function (ec, limitless) {
// Initialize charts
// ------------------------------
var line_bar = ec.init(document.getElementById('line_bar'), limitless);
var column_pie = ec.init(document.getElementById('column_pie'), limitless);
var scatter_pie = ec.init(document.getElementById('scatter_pie'), limitless);
var scatter_line = ec.init(document.getElementById('scatter_line'), limitless);
var connect_pie = ec.init(document.getElementById('connect_pie'), limitless);
var connect_column = ec.init(document.getElementById('connect_column'), limitless);
var candlestick_scatter = ec.init(document.getElementById('candlestick_scatter'), limitless);
// Charts options
// ------------------------------
//
// Line and bar combination
//
line_bar_options = {
// Setup grid
grid: {
x: 55,
x2: 45,
y: 35,
y2: 25
},
// Add tooltip
tooltip: {
trigger: 'axis'
},
// Enable drag recalculate
calculable: true,
// Add legend
legend: {
data: ['Evaporation','Precipitation','Temperature']
},
// Horizontal axis
xAxis: [{
type: 'category',
data: ['January','February','March','April','May','June','July','August','September','October','November','December']
}],
// Vertical axis
yAxis: [
{
type: 'value',
name: 'Water',
axisLabel: {
formatter: '{value} ml'
}
},
{
type: 'value',
name: 'Temp',
axisLabel: {
formatter: '{value} °C'
}
}
],
// Add series
series: [
{
name: 'Evaporation',
type: 'bar',
data: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]
},
{
name: 'Precipitation',
type: 'bar',
data: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]
},
{
name: 'Temperature',
type: 'line',
yAxisIndex: 1,
data: [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2]
}
]
};
//
// Column and pie combination
//
column_pie_options = {
// Setup grid
grid: {
x: 10,
x2: 45,
y: 35,
y2: 25
},
// Add tooltip
tooltip: {
trigger: 'axis'
},
// Enable drag recalculate
calculable: true,
// Add legend
legend: {
data: ['Direct','Email','Print','Video','Search engine','Google','Bing','Yahoo','Other']
},
// Horizontal axis
xAxis: [{
type: 'category',
splitLine: {show: false},
data: ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
}],
// Vertical axis
yAxis: [{
type: 'value',
position: 'right'
}],
// Add series
series: [
{
name: 'Direct',
type: 'bar',
data: [320, 332, 301, 334, 390, 330, 320]
},
{
name: 'Email',
type: 'bar',
tooltip: {trigger: 'item'},
stack: 'Advertisement',
data: [120, 132, 101, 134, 90, 230, 210]
},
{
name: 'Print',
type: 'bar',
tooltip: {trigger: 'item'},
stack: 'Advertisement',
data: [220, 182, 191, 234, 290, 330, 310]
},
{
name: 'Video',
type: 'bar',
tooltip: {trigger: 'item'},
stack: 'Advertisement',
data: [150, 232, 201, 154, 190, 330, 410]
},
{
name: 'Search engine',
type: 'line',
data: [862, 1018, 964, 1026, 1679, 1600, 1570]
},
// Pie
{
name: 'Search engine',
type: 'pie',
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b}: {c} ({d}%)'
},
center: [150, 130],
radius: [0, 50],
itemStyle: {
normal: {
labelLine: {
length: 20
}
}
},
data: [
{value: 1048, name: 'Google'},
{value: 251, name: 'Bing'},
{value: 147, name: 'Yahoo'},
{value: 102, name: 'Other'}
]
}
]
};
//
// Scatter and pie combination
//
// Data set 1
var sData1 = (function () {
var d = [];
var len = 40;
var value;
while (len--) {
d.push([
Math.round(Math.random()*10) * (Math.round(Math.random()*10) > 5 ? 1: -1),
Math.round(Math.random()*10) * (Math.round(Math.random()*10) > 5 ? 1: -1),
Math.round(Math.random()*20)
]);
}
return d;
})();
// Data set 2
var sData2 = (function () {
var d = [];
var len = sData1.length;
for (var i = 0; i < len; i++) {
d.push([
sData1[i][0],
sData1[i][1],
Math.round(Math.random()*15)
]);
}
return d;
})();
// Setup
scatter_pie_options = {
// Setup grid
grid: {
x: 35,
x2: 35,
y: 35,
y2: 35
},
// Set custo, colors
color: ['rgba(255, 69, 0, 0.5)', 'rgba(30, 144, 255, 0.5)'],
// Add tooltip
tooltip: {
trigger: 'item',
formatter: "{b}: {c} ({d}%)"
},
// Horizontal axis
xAxis: [{
type: 'value',
splitNumber: 2
}],
// Vertical axis
yAxis: [{
type: 'value',
splitNumber: 2
}],
//animation: false,
// Add series
series: [
{
type: 'scatter',
symbol: 'none',
data: sData1
},
{
type: 'scatter',
symbol: 'none',
data: sData2
}
]
};
// Generate pie series
function buildPieSeries() {
var xAxis = scatter_pie.component.xAxis.getAxis(0);
var yAxis = scatter_pie.component.yAxis.getAxis(0);
var len = sData1.length;
scatter_pie_options.series = scatter_pie_options.series.slice(0,2);
scatter_pie_options.legend = {
data: ['Summer', 'Winter']
};
while (len--) {
scatter_pie_options.series.push({
type: 'pie',
itemStyle: {
normal: {
label: {
show: false
},
labelLine: {
show: false
}
}
},
radius: sData1[len][2] + sData2[len][2],
center: [
xAxis.getCoord(sData1[len][0]),
yAxis.getCoord(sData1[len][1])
],
data: [
{name: 'Summer', value: sData1[len][2]},
{name: 'Winter', value: sData2[len][2]}
]
})
}
scatter_pie_options.animation = true;
scatter_pie.setOption(scatter_pie_options, true);
}
// Build pie charts instead of the original scatter
setTimeout(buildPieSeries, 100);
//
// Scatter and line combination
//
scatter_line_options = {
// Setup grid
grid: {
x: 35,
x2: 35,
y: 35,
y2: 25
},
// Add tooltip
tooltip: {
trigger: 'axis'
},
// Add data range
dataRange: {
min: 0,
max: 100,
orient: 'horizontal',
y: 'top',
x: 'center',
color: ['#FF8A65','#FBE9E7'],
splitNumber: 5
},
// Horizontal axis
xAxis: [
{
type: 'category',
boundaryGap: false,
data: function () {
var list = [];
for (var i = 1; i <= 15; i++) {
list.push('2013-03-' + i);
}
return list;
}()
},
{
type: 'value',
scale: true,
splitNumber: 15,
axisLabel: {show: false},
splitLine: {show: false}
}
],
// Vertical axis
yAxis: [
{
type: 'value'
},
{
type: 'value'
}
],
// Add series
series: [
{
name: 'Scatter value',
type: 'scatter',
tooltip: {
trigger: 'item',
formatter: function (params) {
return '2013-03-' + params.value[0] + '<br/>'
+ params.seriesName + ': '
+ params.value[1] + ', '
+ params.value[2];
}
},
yAxisIndex: 1,
xAxisIndex: 1,
symbol: 'circle',
symbolSize: function (value){
return Math.round(value[2]/10);
},
data: (function () {
var d = [];
var len = 200;
var value;
while (len--) {
d.push([
Math.round(Math.random()*29) + 1,
(Math.random()*30).toFixed(2) - 0,
(Math.random()*100).toFixed(2) - 0
]);
}
return d;
})()
},
{
name: 'Line value',
type: 'line',
data: function (){
var list = [];
for (var i = 1; i <= 30; i++) {
list.push(Math.round(Math.random()* 30));
}
return list;
}()
}
]
};
//
// Column and pie connection
//
// Pie options
connect_pie_options = {
// Add title
title: {
text: 'Browser popularity',
subtext: 'Open source data',
x: 'center'
},
// Add tooltip
tooltip: {
trigger: 'item',
formatter: "{a} <br/>{b}: {c} ({d}%)"
},
// Add legend
legend: {
orient: 'vertical',
x: 'left',
data: ['Internet Explorer','Opera','Safari','Firefox','Chrome']
},
// Enable drag recalculate
calculable: true,
// Add series
series: [{
name: 'Browser',
type: 'pie',
radius: '75%',
center: ['50%', '57.5%'],
data: [
{value: 335, name: 'Internet Explorer'},
{value: 310, name: 'Opera'},
{value: 234, name: 'Safari'},
{value: 135, name: 'Firefox'},
{value: 1548, name: 'Chrome'}
]
}]
};
// Column options
connect_column_options = {
// Setup grid
grid: {
x: 40,
x2: 47,
y: 35,
y2: 25
},
// Add tooltip
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
// Add legend
legend: {
data: ['Internet Explorer','Opera','Safari','Firefox','Chrome']
},
// Add toolbox
toolbox: {
show: true,
orient: 'vertical',
x: 'right',
y: 35,
feature: {
mark: {
show: true,
title: {
mark: 'Markline switch',
markUndo: 'Undo markline',
markClear: 'Clear markline'
}
},
magicType: {
show: true,
title: {
line: 'Switch to line chart',
bar: 'Switch to bar chart',
stack: 'Switch to stack',
tiled: 'Switch to tiled'
},
type: ['line', 'bar', 'stack', 'tiled']
},
restore: {
show: true,
title: 'Restore'
},
saveAsImage: {
show: true,
title: 'Same as image',
lang: ['Save']
}
}
},
// Enable drag recalculate
calculable: true,
// Horizontal axis
xAxis: [{
type: 'category',
data: ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
}],
// Vertical axis
yAxis: [{
type: 'value',
splitArea: {show: true}
}],
// Add series
series: [
{
name: 'Internet Explorer',
type: 'bar',
stack: 'Total',
data: [320, 332, 301, 334, 390, 330, 320]
},
{
name: 'Opera',
type: 'bar',
stack: 'Total',
data: [120, 132, 101, 134, 90, 230, 210]
},
{
name: 'Safari',
type: 'bar',
stack: 'Total',
data: [220, 182, 191, 234, 290, 330, 310]
},
{
name: 'Firefox',
type: 'bar',
stack: 'Total',
data: [150, 232, 201, 154, 190, 330, 410]
},
{
name: 'Chrome',
type: 'bar',
stack: 'Total',
data: [820, 932, 901, 934, 1290, 1330, 1320]
}
]
};
// Connect charts
connect_pie.connect(connect_column);
connect_column.connect(connect_pie);
//
// Dynamic data (scatter and candlestick combination)
//
candlestick_scatter_options = {
// Setup grid
grid: {
x: 45,
x2: 45,
y: 60,
y2: 90
},
// Add tooltip
tooltip: {
trigger: 'axis'
},
// Add legend
legend: {
data:['Composite index', 'Turnover (million)']
},
// Display data zoom
dataZoom: {
show: true,
realtime: true,
start: 50,
end: 100,
height: 40
},
// Horizontal axis
xAxis: [
{
type: 'category',
boundaryGap: true,
data: [
"2013/1/24", "2013/1/25", "2013/1/28", "2013/1/29", "2013/1/30",
"2013/1/31", "2013/2/1", "2013/2/4", "2013/2/5", "2013/2/6",
"2013/2/7", "2013/2/8", "2013/2/18", "2013/2/19", "2013/2/20",
"2013/2/21", "2013/2/22", "2013/2/25", "2013/2/26", "2013/2/27",
"2013/2/28", "2013/3/1", "2013/3/4", "2013/3/5", "2013/3/6",
"2013/3/7", "2013/3/8", "2013/3/11", "2013/3/12", "2013/3/13",
"2013/3/14", "2013/3/15", "2013/3/18", "2013/3/19", "2013/3/20",
"2013/3/21", "2013/3/22", "2013/3/25", "2013/3/26", "2013/3/27",
"2013/3/28", "2013/3/29", "2013/4/1", "2013/4/2", "2013/4/3",
"2013/4/8", "2013/4/9", "2013/4/10", "2013/4/11", "2013/4/12",
"2013/4/15", "2013/4/16", "2013/4/17", "2013/4/18", "2013/4/19",
"2013/4/22", "2013/4/23", "2013/4/24", "2013/4/25", "2013/4/26",
"2013/5/2", "2013/5/3", "2013/5/6", "2013/5/7", "2013/5/8",
"2013/5/9", "2013/5/10", "2013/5/13", "2013/5/14", "2013/5/15",
"2013/5/16", "2013/5/17", "2013/5/20", "2013/5/21", "2013/5/22",
"2013/5/23", "2013/5/24", "2013/5/27", "2013/5/28", "2013/5/29",
"2013/5/30", "2013/5/31", "2013/6/3", "2013/6/4", "2013/6/5",
"2013/6/6", "2013/6/7", "2013/6/13"
]
},
{
type: 'value',
max: 100,
scale: true
}
],
// Vertical axis
yAxis: [
{
type: 'value',
scale: true,
splitNumber: 5,
boundaryGap: [0.05, 0.05]
},
{
type: 'value',
splitNumber: 5,
scale: true
}
],
// Add series
series: [
{
name: 'Composite index',
type: 'k',
data: [
[2320.26,2302.6,2287.3,2362.94],
[2300,2291.3,2288.26,2308.38],
[2295.35,2346.5,2295.35,2346.92],
[2347.22,2358.98,2337.35,2363.8],
[2360.75,2382.48,2347.89,2383.76],
[2383.43,2385.42,2371.23,2391.82],
[2377.41,2419.02,2369.57,2421.15],
[2425.92,2428.15,2417.58,2440.38],
[2411,2433.13,2403.3,2437.42],
[2432.68,2434.48,2427.7,2441.73],
[2430.69,2418.53,2394.22,2433.89],
[2416.62,2432.4,2414.4,2443.03],
[2441.91,2421.56,2415.43,2444.8],
[2420.26,2382.91,2373.53,2427.07],
[2383.49,2397.18,2370.61,2397.94],
[2378.82,2325.95,2309.17,2378.82],
[2322.94,2314.16,2308.76,2330.88],
[2320.62,2325.82,2315.01,2338.78],
[2313.74,2293.34,2289.89,2340.71],
[2297.77,2313.22,2292.03,2324.63],
[2322.32,2365.59,2308.92,2366.16],
[2364.54,2359.51,2330.86,2369.65],
[2332.08,2273.4,2259.25,2333.54],
[2274.81,2326.31,2270.1,2328.14],
[2333.61,2347.18,2321.6,2351.44],
[2340.44,2324.29,2304.27,2352.02],
[2326.42,2318.61,2314.59,2333.67],
[2314.68,2310.59,2296.58,2320.96],
[2309.16,2286.6,2264.83,2333.29],
[2282.17,2263.97,2253.25,2286.33],
[2255.77,2270.28,2253.31,2276.22],
[2269.31,2278.4,2250,2312.08],
[2267.29,2240.02,2239.21,2276.05],
[2244.26,2257.43,2232.02,2261.31],
[2257.74,2317.37,2257.42,2317.86],
[2318.21,2324.24,2311.6,2330.81],
[2321.4,2328.28,2314.97,2332],
[2334.74,2326.72,2319.91,2344.89],
[2318.58,2297.67,2281.12,2319.99],
[2299.38,2301.26,2289,2323.48],
[2273.55,2236.3,2232.91,2273.55],
[2238.49,2236.62,2228.81,2246.87],
[2229.46,2234.4,2227.31,2243.95],
[2234.9,2227.74,2220.44,2253.42],
[2232.69,2225.29,2217.25,2241.34],
[2196.24,2211.59,2180.67,2212.59],
[2215.47,2225.77,2215.47,2234.73],
[2224.93,2226.13,2212.56,2233.04],
[2236.98,2219.55,2217.26,2242.48],
[2218.09,2206.78,2204.44,2226.26],
[2199.91,2181.94,2177.39,2204.99],
[2169.63,2194.85,2165.78,2196.43],
[2195.03,2193.8,2178.47,2197.51],
[2181.82,2197.6,2175.44,2206.03],
[2201.12,2244.64,2200.58,2250.11],
[2236.4,2242.17,2232.26,2245.12],
[2242.62,2184.54,2182.81,2242.62],
[2187.35,2218.32,2184.11,2226.12],
[2213.19,2199.31,2191.85,2224.63],
[2203.89,2177.91,2173.86,2210.58],
[2170.78,2174.12,2161.14,2179.65],
[2179.05,2205.5,2179.05,2222.81],
[2212.5,2231.17,2212.5,2236.07],
[2227.86,2235.57,2219.44,2240.26],
[2242.39,2246.3,2235.42,2255.21],
[2246.96,2232.97,2221.38,2247.86],
[2228.82,2246.83,2225.81,2247.67],
[2247.68,2241.92,2231.36,2250.85],
[2238.9,2217.01,2205.87,2239.93],
[2217.09,2224.8,2213.58,2225.19],
[2221.34,2251.81,2210.77,2252.87],
[2249.81,2282.87,2248.41,2288.09],
[2286.33,2299.99,2281.9,2309.39],
[2297.11,2305.11,2290.12,2305.3],
[2303.75,2302.4,2292.43,2314.18],
[2293.81,2275.67,2274.1,2304.95],
[2281.45,2288.53,2270.25,2292.59],
[2286.66,2293.08,2283.94,2301.7],
[2293.4,2321.32,2281.47,2322.1],
[2323.54,2324.02,2321.17,2334.33],
[2316.25,2317.75,2310.49,2325.72],
[2320.74,2300.59,2299.37,2325.53],
[2300.21,2299.25,2294.11,2313.43],
[2297.1,2272.42,2264.76,2297.1],
[2270.71,2270.93,2260.87,2276.86],
[2264.43,2242.11,2240.07,2266.69],
[2242.26,2210.9,2205.07,2250.63],
[2190.1,2148.35,2126.22,2190.1]
]
},
{
name: 'Turnover (million)',
type: 'scatter',
xAxisIndex: 1,
yAxisIndex: 1,
symbolSize: function (value) {
return Math.round(value[2] / 4);
},
data: (function () {
var d = [];
var len = 100;
while (len--) {
d.push([
(Math.random()*100).toFixed(2) - 0,
(Math.random()*100).toFixed(2) - 0,
(Math.random()*100).toFixed(2) - 0
]);
}
return d;
})()
}
]
};
var lastIndex = 0;
var len = candlestick_scatter_options.series[0].data.length;
clearInterval(random_data);
var random_data = setInterval(function (){
lastIndex += 1;
candlestick_scatter.addData([
[
0,
candlestick_scatter_options.series[0].data[lastIndex%len],
false,
false,
candlestick_scatter_options.xAxis[0].data[lastIndex%len]
],
[
1,
[
(Math.random()*100).toFixed(2) - 0,
(Math.random()*100).toFixed(2) - 0,
(Math.random()*100).toFixed(2) - 0
],
false,
false
]
]);
}, 2000);
// Apply options
// ------------------------------
line_bar.setOption(line_bar_options);
column_pie.setOption(column_pie_options);
scatter_pie.setOption(scatter_pie_options);
scatter_line.setOption(scatter_line_options);
candlestick_scatter.setOption(candlestick_scatter_options);
connect_pie.setOption(connect_pie_options);
connect_column.setOption(connect_column_options);
// Resize charts
// ------------------------------
window.onresize = function () {
setTimeout(function (){
line_bar.resize();
column_pie.resize();
scatter_pie.resize();
buildPieSeries();
scatter_line.resize();
candlestick_scatter.resize();
connect_pie.resize();
connect_column.resize();
}, 200);
}
}
);
});