简体   繁体   English

将JSON数据加载到具有多个序列的highcharts中

[英]Loading json data to highcharts with multiple series

Please help. 请帮忙。 Been banging my head against the wall on this for a week, trying every option I can find on line but no luck... 在这个问题上,我的头撞墙了一周,尝试所有我可以在线找到的选择,但是没有运气...

Am using HighCharts with a C#/Razor/WebMatrix site. 我在C#/ Razor / WebMatrix网站上使用HighCharts。 Trying to create a Stacked column chart - have my Categories loading dynamically but can't get the series loaded. 尝试创建堆积柱形图-动态加载我的类别,但无法加载系列。

I am new to Javascript and web programming in general so please be kind! 我是Java语言和网络编程的新手,所以请保持友好!

The JSON return data is: JSON返回数据为:

["Clubs","1850","2600","5600","4950","8535","6050","8640",
 "Fesitvals","0","0","1000","750","0","1500","3250",
 "Private","650","2300","1600","2500","0","400","900",
 "Weddings","0","1400","3600","0","0","0","0",
 "Other Income","0","0","70","540","50","0","0"]

I am trying to load the series data prior to rendering the chart... The following is the entire script with formatting, etc. 我正在尝试在呈现图表之前加载系列数据...以下是带有格式设置等的整个脚本。

script bombs out on the function to process and load the Json Data set (see Bold/Italic) . 脚本会炸弹该函数,以处理和加载Json数据集(请参阅粗体/斜体) Chart looks great if hard code the series data, but since the site is database driven and the data changes regularly.... 如果对系列数据进行硬编码,则Chart看起来不错,但是由于站点是数据库驱动的,因此数据会定期更改。

Here is the script: 这是脚本:

$(function () {
    var ChartType = document.getElementById("CType").value;
    var SelectMember = document.getElementById("SMbmr").value;
    Highcharts.theme = {

        chart: {
            backgroundColor: {
                linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                stops: [
            [0, 'rgb(0, 0, 0'],
            [1, 'rgb(0, 0, 0)']
         ]
            },
            borderWidth: 0,
            borderRadius: 15,
            plotBackgroundColor: null,
            plotShadow: false,
            plotBorderWidth: 0
        },
        title: {
            style: {
                color: '#FFF',
                font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
            }
        },
        subtitle: {
            style: {
                color: '#DDD',
                font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
            }
        },
        xAxis: {
            gridLineWidth: 0,
            lineColor: '#999',
            tickColor: '#999',
            labels: {
                style: {
                    color: '#999',
                    fontWeight: 'bold'
                }
            },
            title: {
                style: {
                    color: '#AAA',
                    font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
                }
            }
        },
        yAxis: {
            alternateGridColor: null,
            minorTickInterval: null,
            gridLineColor: 'rgba(255, 255, 255, .1)',
            minorGridLineColor: 'rgba(255,255,255,0.07)',
            lineWidth: 0,
            tickWidth: 0,
            labels: {
                style: {
                    color: '#999',
                    fontWeight: 'bold'
                }
            },
            title: {
                style: {
                    color: '#AAA',
                    font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
                }
            }
        },
        legend: {
            itemStyle: {
                color: '#CCC'
            },
            itemHoverStyle: {
                color: '#FFF'
            },
            itemHiddenStyle: {
                color: '#333'
            }
        },
        labels: {
            style: {
                color: '#CCC'
            }
        },
        tooltip: {
            backgroundColor: {
                linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                stops: [
            [0, 'rgba(96, 96, 96, .8)'],
            [1, 'rgba(16, 16, 16, .8)']
         ]
            },
            borderWidth: 0,
            style: {
                color: '#FFF'
            }
        },


        plotOptions: {
            series: {
                shadow: true
            },
            line: {
                dataLabels: {
                    color: '#CCC'
                },
                marker: {
                    lineColor: '#333'
                }
            },
            spline: {
                marker: {
                    lineColor: '#333'
                }
            },
            scatter: {
                marker: {
                    lineColor: '#333'
                }
            },
            candlestick: {
                lineColor: 'white'
            }
        },

        toolbar: {
            itemStyle: {
                color: '#CCC'
            }
        },

        navigation: {
            buttonOptions: {
                symbolStroke: '#DDDDDD',
                hoverSymbolStroke: '#FFFFFF',
                theme: {
                    fill: {
                        linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                        stops: [
                  [0.4, '#606060'],
                  [0.6, '#333333']
               ]
                    },
                    stroke: '#000000'
                }
            }
        },

        // scroll charts
        rangeSelector: {
            buttonTheme: {
                fill: {
                    linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                    stops: [
               [0.4, '#888'],
               [0.6, '#555']
            ]
                },
                stroke: '#000000',
                style: {
                    color: '#CCC',
                    fontWeight: 'bold'
                },
                states: {
                    hover: {
                        fill: {
                            linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                            stops: [
                     [0.4, '#BBB'],
                     [0.6, '#888']
                  ]
                        },
                        stroke: '#000000',
                        style: {
                            color: 'white'
                        }
                    },
                    select: {
                        fill: {
                            linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                            stops: [
                     [0.1, '#000'],
                     [0.3, '#333']
                  ]
                        },
                        stroke: '#000000',
                        style: {
                            color: 'yellow'
                        }
                    }
                }
            },
            inputStyle: {
                backgroundColor: '#333',
                color: 'silver'
            },
            labelStyle: {
                color: 'silver'
            }
        },

        navigator: {
            handles: {
                backgroundColor: '#666',
                borderColor: '#AAA'
            },
            outlineColor: '#CCC',
            maskFill: 'rgba(16, 16, 16, 0.5)',
            series: {
                color: '#7798BF',
                lineColor: '#A6C7ED'
            }
        },

        scrollbar: {
            barBackgroundColor: {
                linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                stops: [
               [0.4, '#888'],
               [0.6, '#555']
            ]
            },
            barBorderColor: '#CCC',
            buttonArrowColor: '#CCC',
            buttonBackgroundColor: {
                linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                stops: [
               [0.4, '#888'],
               [0.6, '#555']
            ]
            },
            buttonBorderColor: '#CCC',
            rifleColor: '#FFF',
            trackBackgroundColor: {
                linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                stops: [
            [0, '#000'],
            [1, '#333']
         ]
            },
            trackBorderColor: '#666'
        },

        // special colors for some of the demo examples
        legendBackgroundColor: 'rgba(48, 48, 48, 0.8)',
        legendBackgroundColorSolid: 'rgb(70, 70, 70)',
        dataLabelsColor: '#444',
        textColor: '#E0E0E0',
        maskColor: 'rgba(255,255,255,0.3)'
    };

    // Apply the theme
    var highchartsOptions = Highcharts.setOptions(Highcharts.theme);
    var CatName = new Array();
    var DataSeries = new Array();
    var currentDate = new Date();
    var currentYear = currentDate.getFullYear();
    for (var i = 2007; i <= currentYear; i++) {
        CatName.push(i.toString());
    }
    ***$.getJSON('/Admin/Accounting/ChartJSon/' + ChartType + '/0', function (DataSet) {
          options.series = DataSet;
    });***
    $('#container').highcharts(
        {

            chart:
            {
                renderTo: 'container',
                defaultSeriesType: 'column',
                plotBorderWidth: 1,
                plotBorderColor: '#3F4044'
            },
            credits: { enabled: false },
            title:
            {
                text: 'Sales by Type and Year'
            },

            xAxis:
            {
                categories: CatName
            },

            yAxis:
            {
                allowDecimals: false,
                min: 0,
                title:
                {
                    text: 'Sales'
                }
            },

            tooltip:
            {
                formatter: function () {
                    return '<b>' + this.x + '</b><br/>' +
                        this.series.name + ': ' + this.y + '<br/>' +
                        'Total: ' + this.point.stackTotal;
                }
            },

            plotOptions:
            {
                column:
                {
                    stacking: 'normal'
                }
            },

            series: []
        });

});

Well I see some problems here. 好吧,我在这里看到了一些问题。 First try to replace the highchart code with the below mentioned code. 首先尝试用下面提到的代码替换highchart代码。 As you need to specify data for each series in the series option. 因为您需要在系列选项中为每个系列指定数据。 and provide with the unique name. 并提供唯一的名称。

 $('#container').highcharts(
                {

                    chart:
                    {
                        renderTo: 'container',
                        defaultSeriesType: 'column',
                        plotBorderWidth: 1,
                        plotBorderColor: '#3F4044'
                    },
                    credits: { enabled: false },
                    title:
                    {
                        text: 'Sales by Type and Year'
                    },

                    xAxis:
                    {
                        categories: CatName
                    },

                    yAxis:
                    {
                        allowDecimals: false,
                        min: 0,
                        title:
                        {
                            text: 'Sales'
                        }
                    },

                    tooltip:
                    {
                        formatter: function () {
                            return '<b>' + this.x + '</b><br/>' +
                                this.series.name + ': ' + this.y + '<br/>' +
                                'Total: ' + this.point.stackTotal;
                        }
                    },

                    plotOptions:
                    {
                        column:
                        {
                            stacking: 'normal'
                        }
                    },

                   series: [{
                        name: 'Clubs',
                        data: []
                    }, {
                        name: 'Festivals',
                        data: []
                    }, {
                        name: 'Private',
                        data: [],
                    }, {
                        name: 'Weddings',
                        data: [],
                    }, {
                        name: 'OtherIncome',
                        data: [],
                    }]
                });

        });

And your JSON should be an array consisting only numbers. 而且您的JSON应该是仅包含数字的数组。

  1. Chart initialization should in insie getJSON body, because you try to initialize chart, earlier then data is get from URL 图表初始化应在insie getJSON主体中,因为您尝试初始化图表,所以较早的数据是从URL获取的
  2. In JSON you need to use numbers, not strings. 在JSON中,您需要使用数字,而不是字符串。 If it is not possbile, you need to parse values in javascript by parseFloat on each data value. 如果不是可能的话,则需要通过parseFloat对每个数据值解析javascript中的值。
  3. Your series data object, should contian only numbers, not names like "Fesitvals". 您的系列数据对象应仅包含数字,而不包含“ Fesitvals”之类的名称。 If you wuld like to have a few series, and each of them has own name, you need to parse your json and praaper correct array structure. 如果您想拥有几个系列,并且每个系列都有自己的名称,则需要解析json和praaper正确的数组结构。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM