Добавление регрессии к нескольким сериям, импортированным из CSV - PullRequest
0 голосов
/ 05 июня 2019

У меня есть многосерийная диаграмма Highcharts, которая отлично работает, когда она просто берет данные из созданного мной CSV-файла. Я пытаюсь добавить (лесс) регрессионную кривую к нему с помощью плагина highcharts-regression, но просто включив регрессию по умолчанию, результаты на графике вообще не отображаются. Заявка на http://bmcnoldy.rsmas.miami.edu/vk/

Во-первых, правильный файл JS для плагина называется в моем HTML: https://rawgithub.com/phpepe/highcharts-regression/master/highcharts-regression.js

Ни один из примеров высокой регрессии-диаграммы не использует несколько рядов, которые были импортированы из встроенного CSV-импорта.

Суть создания диаграммы (если регрессия: ложь, тогда диаграмма работает и отображается, если регрессия: правда, она ломается):

$.get('chart.csv', function(csv) {
   $('#container').highcharts({
    data: {
      csv: csv
    },
    series: [{
      (basic series options that work),
      regression: true,
    },{
      (basic series options that work),
      regression: true,
    },{
    ...
    }]
  });
});

Вот фрагмент моего CSV-файла из пяти серий для справки:

Date,Record High,Average High,Daily Average,Average Low,Record Low
"01-Jan-2000",80.2000,75.0000,72.0000,68.2000,45.5000
"02-Jan-2000",79.7000,75.0000,72.1000,68.3000,49.1000
"03-Jan-2000",79.2000,73.7000,70.0000,65.6000,46.4000
"04-Jan-2000",79.0000,72.0000,67.8000,63.7000,43.7000
"05-Jan-2000",80.2000,71.8000,67.4000,62.5000,44.2000
"06-Jan-2000",78.3000,73.0000,68.7000,63.5000,41.0000
"07-Jan-2000",78.3000,71.9000,67.5000,62.3000,45.5000

Внутри каждого конфига серии я пытался добавить data: [], просто объект данных присутствовал ... это не имело значения. Но есть ли способ установить данные для правильных столбцов в объекте CSV, как data: [[csv[0]],[csv[1]]], или что-то типа того? Это будет иметь значение?

Я просто хотел добавить регрессионную кривую Лёсса к каждой из пяти серий, что выглядело так просто из примеров на https://www.highcharts.com/products/plugin-registry/single/22/Highcharts%20regression!

Спасибо!

1 Ответ

1 голос
/ 07 июня 2019

Прежде всего, обратите внимание, что индикатор linearRegression служит для поиска отдельных значений (точек, а не линий) за данный период.

Эта демонстрация иллюстрирует, как получить линию регрессии в Хайчстоке (она будет работать с данными, передаваемыми как data.csv (хотя я не делал этого, чтобы сохранить ясность)): http://jsfiddle.net/BlackLabel/w0ohb647/

Highstock предлагает три индикатора, которые помогут нам найти линию: linearRegressionSlope, linearRegressionIntercept и linearRegressionAngle. Если мы установим их params.period равными длине данных, то у каждого из этих рядов индикаторов будет только одна точка . Оказывается, что мы можем использовать значения y этих точек (наклон, угол, пересечение), чтобы найти уравнение прямой линии, которая нам нужна: y = slope * x + intercept.

    this.addSeries({
      type: 'linearRegressionSlope',
      linkedTo: 'recordHigh'
    }, false);

    this.addSeries({
      type: 'linearRegressionIntercept',
      linkedTo: 'recordHigh'
    }, false);

    this.addSeries({
      type: 'linearRegressionAngle',
      linkedTo: 'recordHigh'
    }, false);

Highstock не предлагает никаких структур для представления бесконечных прямых линий, поэтому мы должны имитировать его как отрезок:

data: [regressionLineStart, regressionLineEnd]

Параметр, который может показаться вам странным, interceptOffset. Это должно быть реализовано, потому что место, где наша линия регрессии пересекает математическую ось y (y = 0), происходит 1 января 1970 года (отметка времени = 0), и мы должны «сделать вид», что математическая ось y начинается с y = Date.UTC(2018) ( в целях моего обходного пути).

Обратите внимание, что вспомогательные серии (linearRegressionSlope, linearRegressionIntercept & linearRegressionAngle) никогда не появляются благодаря установке redraw аргумента в false в addSeries и remove методах.

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