Как добавить линию, которая проходит через начало координат (от положительного до отрицательного) на диаграмме рассеяния - верхняя диаграмма - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь создать опорную линию, которая проходит через начало координат и переходит от отрицательного к положительному. Посмотрите пример того, чего я пытаюсь достичь - посмотрите на пороговую линию. Эта пороговая линия должна проходить через все три координаты x, y (-1, -45 000), (0,0), (1, 45 000). введите описание изображения здесь

Ниже моя работа.

http://jsfiddle.net/catio6/rhf6yre5/1/

Я посмотрел на это для справки, но мне не повезло после нескольких часов попыток повторить это со всеми тремя координатами x, y (-1, -45 000), (0,0), (1, 45 000): http://jsfiddle.net/phpdeveloperrahul/XvjfL/

$(function () {
    $('#container').highcharts({

        xAxis: {
            categories: ['Jan', 'Feb', 'Mar']
        },

        series: [{
            data: [29.9, 71.5, 256]
        }]

    }, function(chart) { // on complete
         console.log("chart = ");
        console.log(chart);
        //chart.renderer.path(['M', 0, 0, 'L', 100, 100, 200, 50, 300, 100])
        chart.renderer.path(['M', 75, 223.5,'L', 259, 47])//M 75 223.5 L 593 223.5
            .attr({
                'stroke-width': 2,
                stroke: 'red'
            })
            .add();

    });
});

1 Ответ

0 голосов
/ 27 апреля 2018

Таким образом, у Highcharts, насколько я знаю, нет способа определить линию, которая идет от / к бесконечности. Одна из идей, которую мне пришлось решить для вас, это динамическое вычисление значений для ряда линий на основе ваших данных. Идея проста: учитывая максимальные значения для X и Y, которые вы хотите построить, нам просто нужно ограничить ось определенным значением, которое имеет смысл, и вычислить значения для ряда асимптот, чтобы он казался бесконечным. Мой алгоритм выглядит так:

// Get all your other data in a well formated way
let yourData = [
 {x: 0.57, y: 72484},
 {x: 0.57, y: 10000}
];

// Find which are the maximum x and y values
let maxX = yourData.reduce((max, v) => max > v.x ? max : v.x, -999999999);
let maxY = yourData.reduce((max, v) => max > v.y ? max : v.y, -999999999);

// Now you will limit you X and Y axis to a value that makes sense due the maximum values
// Here I will limit it to 10K above or lower on Y and 2 above or lower on X
let maxXAxis = maxX + 2;
let minXAxis = - (maxX + 2);
let maxYAxis = maxY + 10000;
let minYAxis = -(maxY + 10000);

// Now you need to calculate the values for the Willingness to pay series
let fn = (x) => 45000 * x; // This is the function that defines the Willingness to pay line

// Calculate the series values
let willingnessSeries = [];
for(let i = Math.floor(minXAxis); i <= Math.ceil(maxXAxis); i++) {
    willingnessSeries.push([i, fn(i)]);
}

Вот рабочая скрипка: http://jsfiddle.net/n5xg1970/

Я протестировал несколько значений для ваших данных, и все они работают нормально. Надеюсь, поможет Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...