многомерный массив для диаграммы jqplot - PullRequest
1 голос
/ 17 февраля 2012

Я пытаюсь создать гистограммы Jqplot и сталкиваюсь с трудностями при создании многомерного массива, например

   var plot2 = $.jqplot('chart2', [
    [[2,1], [4,2], [6,3], [3,4]], 
    [[5,1], [1,2], [3,3], [4,4]], 
    [[4,1], [7,2], [1,3], [2,4]]],

Мои данные находятся в HashMap внутри hashMap, это похоже на

 {software={low=1,high=5, medium=4}, harware={low=3,high=3},network{low=3,high=3,medium=8}}

Как я могу интерпретировать свои данные в многомерном массиве выше.

Я написал следующий код для достижения этого

 $(document).ready(function(){  
    <c:forEach var="data" varStatus="main" items="${data}">  

    var cdata = new Array();

    var twoDOuterArray = new Array(${data.size()});

    <c:forEach var="mapEntry" varStatus="status" items="${data['cData']}">
        twoDOuterArray[${status.index}] = new Array(3);
    </c:forEach>

    <c:forEach var="mapEntry" varStatus="status" items="${data['cData']}">
    <c:forEach var="dataValue" varStatus="status2" items="${mapEntry.value}">
        var valueArray = new Array();           
        alueArray.push(${dataValue.value});
        valueArray.push("${mapEntry.key}");
        twoDOuterArray[${status2.index}][${status.index}]=valueArray;
    </c:forEach>
    //alert(twoDOuterArray[${status.index}].length);
    </c:forEach>



    data.push(twoDOuterArray);

    alert(twoDOuterArray);

    plot2b = $.jqplot('chart2', data, {
        seriesDefaults: {
            renderer:$.jqplot.BarRenderer,
            pointLabels: { show: true, location: 'e', edgeTolerance: -15 },
            shadowAngle: 50,
            rendererOptions: {
                barDirection: 'horizontal'
            }
        },
        title:{
            text: "${title}",                    
            show: true,               
            textColor:"#fff",
        },
        axes: {
            yaxis: {
                renderer: $.jqplot.CategoryAxisRenderer
            }
        },
        legend: { show:true, location: 'e' }
    });


    );

</c:forEach>
});

Кажется, что формат правильный, но я не понимаю, где я ошибаюсь, или это правильный способ создания данных. если бы кто-нибудь мог помочь мне решить это, было бы здорово.

редактировать: Как я могу проверить, что мой массив создан в вышеуказанном необходимом формате?

1 Ответ

2 голосов
/ 20 февраля 2012

Чтобы увидеть, как выглядят ваши данные, я бы использовал Firebug (или аналог вашего любимого браузера), чтобы установить точку останова при вызове jqplot.Затем проверьте переменную, которую вы хотите проверить.

Также кажется, что jqplot должен использовать twoDOuterArray, но вы передаете его data, что может быть проблемой.

Еще одна вещь: если ваш исходный объект данных содержит более одного элемента, внешний <c:forEach>, который у вас есть, приведет к тому, что jqplot наложит новые графики на ранее сгенерированные.

Вместо того, чтобы смешивать JSTL с Javascript, я бы также предложил создать 2d-массив из того места, где установлены другие переменные (например, контроллер).Затем преобразуйте объект в JSON с помощью библиотеки, подобной Gson , и напрямую передайте ее в jqplot.

...