我想使用Highcharts制作类似仪表板的东西(有点像你在许多金融网站上看到的那样)。
我已经掌握了使用容器向页面添加1个图表,所以我告诉自己,许多容器,复制一个图形的代码,都可以;但我无法让它发挥作用。
我至少有8个图表,我想以2X4排列方式组织它们,或者只是叠加在一起。
主要是我的困惑来自于我需要一个通用选项部分(将常用选项分组),但我还需要自定义图形,我需要从CSV加载数据,所以你要做的顺序是什么,给我带来了一些问题。
我试着在这里做一个例子,建议使用setOptions和jQuery.extend,但是我没有成功地使它工作。
是否有一个显示网页骨架的示例,因此我可以看到每个功能的放置位置,顺序以及我需要放入哪种代码?
答案 0 :(得分:1)
您可以在此处找到如何添加多个图表的示例:http://www.highcharts.com/demo/sparkline
复制并粘贴代码:
$(function () {
/**
* Create a constructor for sparklines that takes some sensible defaults and merges in the individual
* chart options. This function is also available from the jQuery plugin as $(element).highcharts('SparkLine').
*/
Highcharts.SparkLine = function (options, callback) {
var defaultOptions = {
chart: {
renderTo: (options.chart && options.chart.renderTo) || this,
backgroundColor: null,
borderWidth: 0,
type: 'area',
margin: [2, 0, 2, 0],
width: 120,
height: 20,
style: {
overflow: 'visible'
},
skipClone: true
},
title: {
text: ''
},
credits: {
enabled: false
},
xAxis: {
labels: {
enabled: false
},
title: {
text: null
},
startOnTick: false,
endOnTick: false,
tickPositions: []
},
yAxis: {
endOnTick: false,
startOnTick: false,
labels: {
enabled: false
},
title: {
text: null
},
tickPositions: [0]
},
legend: {
enabled: false
},
tooltip: {
backgroundColor: null,
borderWidth: 0,
shadow: false,
useHTML: true,
hideDelay: 0,
shared: true,
padding: 0,
positioner: function (w, h, point) {
return { x: point.plotX - w / 2, y: point.plotY - h};
}
},
plotOptions: {
series: {
animation: false,
lineWidth: 1,
shadow: false,
states: {
hover: {
lineWidth: 1
}
},
marker: {
radius: 1,
states: {
hover: {
radius: 2
}
}
},
fillOpacity: 0.25
},
column: {
negativeColor: '#910000',
borderColor: 'silver'
}
}
};
options = Highcharts.merge(defaultOptions, options);
return new Highcharts.Chart(options, callback);
};
var start = +new Date(),
$tds = $("td[data-sparkline]"),
fullLen = $tds.length,
n = 0;
// Creating 153 sparkline charts is quite fast in modern browsers, but IE8 and mobile
// can take some seconds, so we split the input into chunks and apply them in timeouts
// in order avoid locking up the browser process and allow interaction.
function doChunk() {
var time = +new Date(),
i,
len = $tds.length;
for (i = 0; i < len; i++) {
var $td = $($tds[i]),
stringdata = $td.data('sparkline'),
arr = stringdata.split('; '),
data = $.map(arr[0].split(', '), parseFloat),
chart = {};
if (arr[1]) {
chart.type = arr[1];
}
$td.highcharts('SparkLine', {
series: [{
data: data,
pointStart: 1
}],
tooltip: {
headerFormat: '<span style="font-size: 10px">' + $td.parent().find('th').html() + ', Q{point.x}:</span><br/>',
pointFormat: '<b>{point.y}.000</b> USD'
},
chart: chart
});
n++;
// If the process takes too much time, run a timeout to allow interaction with the browser
if (new Date() - time > 500) {
$tds.splice(0, i + 1);
setTimeout(doChunk, 0);
break;
}
// Print a feedback on the performance
if (n === fullLen) {
$('#result').html('Generated ' + fullLen + ' sparklines in ' + (new Date() - start) + ' ms');
}
}
}
doChunk();
});
答案 1 :(得分:1)
要更简单地解决此问题,请查看此example
:
http://jsfiddle.net/jlbriggs/4GaVj/
这是一个非常简单的设置,它首先定义数据数组(您可以将其作为CSV解析的一部分),然后通过Highcharts.setOptions()定义全局选项,然后定义各个图表。
从这个简单的例子到更复杂,灵活和动态的方法,有几种不同的方法可以解决这个问题。但是如果你想从基础开始,这应该会有所帮助。