带有Highcharts图的仪表板样式页面

时间:2014-06-27 01:16:26

标签: highcharts

我想使用Highcharts制作类似仪表板的东西(有点像你在许多金融网站上看到的那样)。

我已经掌握了使用容器向页面添加1个图表,所以我告诉自己,许多容器,复制一个图形的代码,都可以;但我无法让它发挥作用。

我至少有8个图表,我想以2X4排列方式组织它们,或者只是叠加在一起。

主要是我的困惑来自于我需要一个通用选项部分(将常用选项分组),但我还需要自定义图形,我需要从CSV加载数据,所以你要做的顺序是什么,给我带来了一些问题。

我试着在这里做一个例子,建议使用setOptions和jQuery.extend,但是我没有成功地使它工作。

是否有一个显示网页骨架的示例,因此我可以看到每个功能的放置位置,顺序以及我需要放入哪种代码?

2 个答案:

答案 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()定义全局选项,然后定义各个图表。

从这个简单的例子到更复杂,灵活和动态的方法,有几种不同的方法可以解决这个问题。但是如果你想从基础开始,这应该会有所帮助。