Как сделать несколько осей Y с входящими рядами данных из базы данных, используя Highcharts

0

На самом деле дело в том, что мне нужен график, в котором будет отображаться серия данных, но не с одной осью y. Но с множественной осью y, скажем, у меня есть 8 рядов данных, которые будут показаны в одной диаграмме с одиночным ось y.Что я хочу, чтобы она была выборочной, то есть пользователь будет нажимать на поток вкл/выкл, чтобы сделать его видимым или отключить, в то же время ось каждой серии данных также станет видимой. Вот ссылка нужного графика (график, который я хочу на самом деле).

'






<!-- Styles -->
<style>
#chartdiv {
    width   : 140%;
    height  : 800px;
}
.highcharts-credits {

    display: none !important;
}

</style>

<!-- Resources -->
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="http://highcharts.github.io/export-csv/export-csv.js"></script>

<div id="container" style="min-width: 200px; height: 400px; margin: 0 auto"></div>


<!-- Chart code --> <script>

        $(function () {
               var lastPart = window.location.pathname.split("/").pop();
                $.getJSON('/demo/Devices/chGraph/'+lastPart, function(data) {
                    // Populate series
                    Xdata = [];
                    Ydata = [];

                    Xdata =  data[0].CHGRAPHUpdatetime.time.split(",");


                    for(i = 0; i< data[0].channelGraph.length; i++) {
                       Ydata[i] = {"name": "", "data":[]};
                        Ydata[i].name = data[0].channelGraph[i].chkey;

                        var listnumber = data[0].channelGraph[i].list.split(',').map(function(item) {
                    return parseInt(item, 10);

                });
                    Ydata[i].data = listnumber




                    }
                       console.log(Ydata);


                var chart = new Highcharts.Chart({
                    chart: {
                          renderTo: container,
                          zoomType: 'xy',
                          panning: true,
                          panKey: 'shift',
                          height:600,
                          width:1000,
                          borderColor: '#EBBA95',
                          borderWidth: 4,
                          spacingTop: 30,
                          spacingBottom: 50,
                          spacingLeft: 100,
                          spacingRight:80
                    },
                    title: {

                            text: 'Monthly Average Temperature'
                           },


                    xAxis: {
                            type: 'varchar',
                            categories: Xdata
                            }, 


                    tooltip: {
                            shared: true,
                            useHTML: true,
                            headerFormat: '<small>{point.key}</small><table>',
                            pointFormat: '<tr><td style="color: {series.color}">{series.name}: </td>' +
                            '<td style="text-align: right"><b>{point.y} </b></td></tr>',
                            footerFormat: '</table>',
                            valueDecimals: 2
                            },


                    series:Ydata,


                },


        }) //end ajax call

        }) // end javascfrpt
        $('#getcsv').click(function () {
    alert(chart.getCSV());
          });   



</script>

<!-- HTML -->
<div id="chartdiv" >

</div>

как добавить несколько y-оси в соответствии с данными каждой серии.

мы получаем данные из кода json и выше, показывает только одну ось y.

Я прикрепил изображение графика. Это фактический график.

Следующее - это требуемое изображение графика. Это необходимый граф.

  • 1
    Ссылка на график не работает и вы можете прочитать, как спросить
  • 0
    Я проверил ссылку, и она работает
Показать ещё 2 комментария
Теги:
highcharts

2 ответа

0
Лучший ответ

То, что вы хотите, возможно, используя высокочастотные диаграммы, есть и пример Несколько осей.

В основном вы указываете значение свойства yAxis как список объектов, создавая объект Chart и каждый объект представляет вид линии, который будет нарисован для выделенной серии.

yAxis: [{ // Primary yAxis
    labels: {
        format: '{value}°C',
        style: {
            color: Highcharts.getOptions().colors[2]
        }
    },
    title: {
        text: 'Temperature',
        style: {
            color: Highcharts.getOptions().colors[2]
        }
    },
    opposite: true

}, { // Secondary yAxis
    gridLineWidth: 0,
    title: {
        text: 'Rainfall',
        style: {
            color: Highcharts.getOptions().colors[0]
        }
    },
    labels: {
        format: '{value} mm',
        style: {
            color: Highcharts.getOptions().colors[0]
        }
    }

}, { // Tertiary yAxis
    gridLineWidth: 0,
    title: {
        text: 'Sea-Level Pressure',
        style: {
            color: Highcharts.getOptions().colors[1]
        }
    },
    labels: {
        format: '{value} mb',
        style: {
            color: Highcharts.getOptions().colors[1]
        }
    },
    opposite: true
}];

Еще одна вещь - указать последовательно, какую ось использовать. Я ваш случай Ydata[i] - это серия, она должна иметь следующую структуру

{
    name: 'Sea-Level Pressure',
    type: 'spline',
    //number of axis to represent scale. 1 is by default for primary yAxis.
    yAxis: 2, 
    data: [1016, 1016, 1015.9, 1015.5, 1012.3, 1009.5, 1009.6, 1010.2, 1013.1, 1016.9, 1018.2, 1016.7],
    marker: {
        enabled: false
    },
    dashStyle: 'shortdot',
    tooltip: {
        valueSuffix: ' mb'
    }

}

Поэтому, когда вы получаете данные в качестве ответа, генерируйте список Ydata объектов, имеющих структуру.

Надеюсь, это решит вашу проблему. Вот демонстрация после добавления еще одной серии в официальный пример.

0

Скорее всего, вам нужно добавить атрибут yAxis в массив yData, чтобы формат стал:

[[name: "x", data: [], yAxis: 1], [name: "y", data: [], yAxis: 2] ]

Создайте счетчик, который добавляет 1 к индексу yAxis на каждой итерации, поэтому вы назначаете его другому yAxis.

YAxis, который нужно также определить на диаграмме

   yAxis: [{
        title: {
            text: 'Title 1'
        }
    }, {
    title: {
            text: 'Title 2'
    }
    }, {
    title: {
            text: 'Title 3'
    },
    }],

Вы можете найти более подробную информацию об этом в этой демонстрации Highcharts

Ещё вопросы

Сообщество Overcoder
Наверх
Меню