<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ZingSoft Demo</title>
<script nonce="undefined" src="https://cdn.zingchart.com/zingchart.min.js"></script>
<style>
#table {
margin-top: 20px;
padding: 10px;
background-color: #F7F7F7;
visibility: hidden;
}
#table h3 {
margin: 0px 10px;
border-bottom: 1px solid black;
}
.row {
margin: 5px 0px;
}
.column {
background-color: #2196F3;
border-radius: 4px;
display: inline-block;
font-size: 16px;
color: #FFF;
padding: 2px 8px;
margin: 0px 5px;
width: 28%;
text-align: center;
}
</style>
</head>
<body>
<div id='myChart'></div>
<div id="table"></div>
<script>
ZC.LICENSE = ["569d52cefae586f634c54f86dc99e6a9", "b55b025e438fa8a98e32482b5f768ff5"];
var myConfig = {
type: "bubble",
backgroundColor: '#F7F7F7',
title: {
text: 'Points Along A Sin Wave'
},
plot: {
selectionMode: "none", // turn off normal selection
marker: {
size: 5,
borderWidth: 0,
alpha: .85,
},
selectedMarker: {
size: 8,
borderWidth: 1,
borderColor: '#000',
},
hoverMarker: {
size: 7
},
tooltip: {
backgroundColor: '#FFF',
fontColor: '#000',
fontSize: 14,
borderRadius: 4,
borderWidth: 1,
borderColor: '#000',
text: '%t: %v',
}
},
plotarea: {
margin: 'dynamic'
},
scaleX: {
visible: false,
},
scaleY: {
minValue: -2,
maxValue: 2,
step: 1,
guide: {
visible: false
},
lineColor: '#90CAF9',
lineWidth: 2,
refLine: {
lineColor: '#90CAF9',
lineWidth: 2
},
item: {
fontColor: '#90CAF9',
fontSize: 14
},
tick: {
lineColor: '#90CAF9'
}
},
// This styling will be pushed during the next build.
// You can style the mask background, border and line color
selectionTool: {
mask: {
borderWidth: 2,
borderColor: 'red',
backgroundColor: 'yellow',
alpha: .5
}
},
series: [{
// Lets create some random values that look cool
values: (function() {
var aV = [];
var len = 500;
var x = 0;
while (len--) {
x = (Math.random() * 10).toFixed(3) - 0;
aV.push([
x,
(Math.sin(x) - x * (len % 2 ? 0.1 : -0.1) * Math.random()).toFixed(3) - 0
]);
}
return aV.sort();
})(),
backgroundColor: '#F48FB1',
text: 'Sin Wave One',
marker: {
backgroundColor: '#F48FB1'
}
},
{
// Lets create some random values that look cool
values: (function() {
var aV = [];
var len = 600;
var x = 0;
while (len--) {
x = (Math.random() * 10).toFixed(3) - 0;
aV.push([
x,
(Math.cos(x) - x * (len % 2 ? 0.1 : -0.1) * Math.random()).toFixed(3) - 0
]);
}
return aV.sort();
})(),
backgroundColor: '#F48FB1',
text: 'Sin Wave Two',
marker: {
backgroundColor: '#CE93D8'
}
}
]
};
/* Special callback function for this dragging module.
* You can use this information to display selected data.
* You can use this information to update the chart etc...
*/
zingchart.bind(null, 'zingchart.plugins.selection-tool.selection', function(e) {
var table = document.getElementById('table');
var header = document.createElement('h3');
var Column = function() {
var column = document.createElement('div');
column.classList.add('column');
return column;
}
var Row = function() {
var row = document.createElement('div');
row.classList.add('row');
return row;
}
// clear table and set header
table.innerHTML = '';
header.innerHTML = 'Selected State Logistics';
table.appendChild(header);
// define variables for creating grid
var totalMinValue = 10000;
var totalMaxValue = 0;
var sumValues = 0;
var row;
var column1;
var column2;
var column3;
// loop through plots and grab information
for (var key in e.nodes) {
// Get global min and max values from plots
if (e.nodes[key].value < totalMinValue)
totalMinValue = e.nodes[key].value;
if (e.nodes[key].value > totalMaxValue)
totalMaxValue = e.nodes[key].value;
sumValues += e.nodes[key].value;
}
// append a new total value row
row = Row();
column1 = Column();
column2 = Column();
column3 = Column();
column1.innerHTML = 'SumValues: ' + sumValues.toFixed(3);
column2.innerHTML = 'MinValue: ' + totalMinValue.toFixed(3);
column3.innerHTML = 'MaxValue: ' + totalMaxValue.toFixed(3);
row.appendChild(column1);
row.appendChild(column2);
row.appendChild(column3);
table.appendChild(row);
// render the table visible
table.style.visibility = 'visible';
});
/* Lets create a place to store our function. Typically it is not recomended
* to modify the zingchart object. This is for advanced users. It is good
* practice to keep all your charting stuff together, in this case your
* custom functions within the zingchart object! This will also help with
* name collisions within the window object.
*
* BE WARNED: you can overwrite stuff in the zingchart object if you are
* not careful. This will mess stuff up.
*/
zingchart.insert_company_name_customFncs = {};
zingchart.insert_company_name_customFncs.clearSelection = function(e) {
zingchart.exec(e.id, 'clearselection');
}
// Load the selection-tool and render the chart once the module is loaded
zingchart.loadModules('selection-tool', function() {
zingchart.render({
id: 'myChart',
// defined data this way since context menu needs to be defined in root (above graphset)
data: {
gui: {
contextMenu: {
customItems: [{
text: 'Clear Selection',
function: 'zingchart.insert_company_name_customFncs.clearSelection()',
id: 'clearSelection'
}]
}
},
graphset: [myConfig]
},
height: 400,
width: '100%',
modules: 'selection-tool'
});
});
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ZingSoft Demo</title>
<script src="https://cdn.zingchart.com/zingchart.min.js"></script>
</head>
<body>
<div id='myChart'></div>
<div id="table"></div>
</body>
</html>
#table {
margin-top: 20px;
padding: 10px;
background-color: #F7F7F7;
visibility: hidden;
}
#table h3 {
margin: 0px 10px;
border-bottom: 1px solid black;
}
.row {
margin: 5px 0px;
}
.column {
background-color: #2196F3;
border-radius: 4px;
display: inline-block;
font-size: 16px;
color: #FFF;
padding: 2px 8px;
margin: 0px 5px;
width: 28%;
text-align: center;
}
var myConfig = {
type: "bubble",
backgroundColor: '#F7F7F7',
title: {
text: 'Points Along A Sin Wave'
},
plot: {
selectionMode: "none", // turn off normal selection
marker: {
size: 5,
borderWidth: 0,
alpha: .85,
},
selectedMarker: {
size: 8,
borderWidth: 1,
borderColor: '#000',
},
hoverMarker: {
size: 7
},
tooltip: {
backgroundColor: '#FFF',
fontColor: '#000',
fontSize: 14,
borderRadius: 4,
borderWidth: 1,
borderColor: '#000',
text: '%t: %v',
}
},
plotarea: {
margin: 'dynamic'
},
scaleX: {
visible: false,
},
scaleY: {
minValue: -2,
maxValue: 2,
step: 1,
guide: {
visible: false
},
lineColor: '#90CAF9',
lineWidth: 2,
refLine: {
lineColor: '#90CAF9',
lineWidth: 2
},
item: {
fontColor: '#90CAF9',
fontSize: 14
},
tick: {
lineColor: '#90CAF9'
}
},
// This styling will be pushed during the next build.
// You can style the mask background, border and line color
selectionTool: {
mask: {
borderWidth: 2,
borderColor: 'red',
backgroundColor: 'yellow',
alpha: .5
}
},
series: [{
// Lets create some random values that look cool
values: (function() {
var aV = [];
var len = 500;
var x = 0;
while (len--) {
x = (Math.random() * 10).toFixed(3) - 0;
aV.push([
x,
(Math.sin(x) - x * (len % 2 ? 0.1 : -0.1) * Math.random()).toFixed(3) - 0
]);
}
return aV.sort();
})(),
backgroundColor: '#F48FB1',
text: 'Sin Wave One',
marker: {
backgroundColor: '#F48FB1'
}
},
{
// Lets create some random values that look cool
values: (function() {
var aV = [];
var len = 600;
var x = 0;
while (len--) {
x = (Math.random() * 10).toFixed(3) - 0;
aV.push([
x,
(Math.cos(x) - x * (len % 2 ? 0.1 : -0.1) * Math.random()).toFixed(3) - 0
]);
}
return aV.sort();
})(),
backgroundColor: '#F48FB1',
text: 'Sin Wave Two',
marker: {
backgroundColor: '#CE93D8'
}
}
]
};
/* Special callback function for this dragging module.
* You can use this information to display selected data.
* You can use this information to update the chart etc...
*/
zingchart.bind(null, 'zingchart.plugins.selection-tool.selection', function(e) {
var table = document.getElementById('table');
var header = document.createElement('h3');
var Column = function() {
var column = document.createElement('div');
column.classList.add('column');
return column;
}
var Row = function() {
var row = document.createElement('div');
row.classList.add('row');
return row;
}
// clear table and set header
table.innerHTML = '';
header.innerHTML = 'Selected State Logistics';
table.appendChild(header);
// define variables for creating grid
var totalMinValue = 10000;
var totalMaxValue = 0;
var sumValues = 0;
var row;
var column1;
var column2;
var column3;
// loop through plots and grab information
for (var key in e.nodes) {
// Get global min and max values from plots
if (e.nodes[key].value < totalMinValue)
totalMinValue = e.nodes[key].value;
if (e.nodes[key].value > totalMaxValue)
totalMaxValue = e.nodes[key].value;
sumValues += e.nodes[key].value;
}
// append a new total value row
row = Row();
column1 = Column();
column2 = Column();
column3 = Column();
column1.innerHTML = 'SumValues: ' + sumValues.toFixed(3);
column2.innerHTML = 'MinValue: ' + totalMinValue.toFixed(3);
column3.innerHTML = 'MaxValue: ' + totalMaxValue.toFixed(3);
row.appendChild(column1);
row.appendChild(column2);
row.appendChild(column3);
table.appendChild(row);
// render the table visible
table.style.visibility = 'visible';
});
/* Lets create a place to store our function. Typically it is not recomended
* to modify the zingchart object. This is for advanced users. It is good
* practice to keep all your charting stuff together, in this case your
* custom functions within the zingchart object! This will also help with
* name collisions within the window object.
*
* BE WARNED: you can overwrite stuff in the zingchart object if you are
* not careful. This will mess stuff up.
*/
zingchart.insert_company_name_customFncs = {};
zingchart.insert_company_name_customFncs.clearSelection = function(e) {
zingchart.exec(e.id, 'clearselection');
}
// Load the selection-tool and render the chart once the module is loaded
zingchart.loadModules('selection-tool', function() {
zingchart.render({
id: 'myChart',
// defined data this way since context menu needs to be defined in root (above graphset)
data: {
gui: {
contextMenu: {
customItems: [{
text: 'Clear Selection',
function: 'zingchart.insert_company_name_customFncs.clearSelection()',
id: 'clearSelection'
}]
}
},
graphset: [myConfig]
},
height: 400,
width: '100%',
modules: 'selection-tool'
});
});