получите значение Y, заданное значением X в AM-диаграммах JS

#javascript #reactjs #amcharts #amcharts4

Вопрос:

Я использую amCharts для своего проекта, чего я хочу, так это выполнить это:

приведено 1. точки данных:

 const data = [{x: 23, y: 0},{x: 24, y: 0},{x: 25, y: 23},...,{x: 26, y: 24}]
 

Я хочу извлечь любое значение Y, заданное значением X, из ряда…

Частичный код, который я использую для создания диаграммы:

         this.chart = am4core.create(this.chartDiv, am4charts.XYChart);

        this.title = this.chart.titles.create();

        // chartData is just an array of x,y values
        this.chart.data = this.props.chartData;

        const X_AXIS = this.chart.xAxes.push(new am4charts.ValueAxis());
        X_AXIS.title.text = "X VALUES";

        const Y_AXIS = this.chart.yAxes.push(new am4charts.ValueAxis());
        Y_AXIS.title.text = "Y VALUES";

        this.series = this.chart.series.push(new am4charts.LineSeries());
        this.series.dataFields.valueX = "xValue";
        this.series.dataFields.valueY = "yValue";

        // cursor
        this.chart.cursor = new am4charts.XYCursor();
        this.chart.cursor.xAxis = X_AXIS;
        this.chart.cursor.yAxis = Y_AXIS;
        this.chart.cursor.snapToSeries = this.series;
 

Как я могу этого добиться? Скажем, значение Y для X = 24 в JS (что-то вроде этого.series.get(25))

Ответ №1:

Почему бы просто не выполнить поиск по данным с помощью этого Array.prototype.find метода, поскольку вы все равно генерируете свои баллы на основе массива данных.

 const data = [{x: 23, y: 0},{x: 24, y: 0},{x: 25, y: 23},{x: 26, y: 24}];

console.log(data.find(item => item.x === 23).y); 

Комментарии:

1. Дело в том, что данные не являются полными, например, в моем наборе данных есть только целые числа, тогда как am charts интерполирует значения между ними. итак, если x = 23,5, что такое y? мне это нужно из таблицы.

2. Если вы собираетесь сделать шаг только на 0,5 x единиц, вы можете просто взять значения y точек справа и слева от x = 23,5, добавить их, а затем разделить на два.

3. это был всего лишь пример, линия может быть любым 2d-полиномом, и мне понадобится любая промежуточная точка…