Форматирование всплывающей подсказки Apex Charts: как преобразовать число в строку - PullRequest
1 голос
/ 03 октября 2019

Я пытаюсь показать значение y линейного графика во всплывающих подсказках (apexcharts). Исходные данные задаются в строковом формате в сериях {'8:50 AM', '11: 00 AM', '9:02 AM' ...}, но они отображаются как «8», «11», «9'... во всплывающих подсказках, округленных в числовой формат. Я не понимаю, почему строковые данные конвертируются и округляются сами по себе. Я использовал toString для отображения полного текста («8:50 AM», «11: 00 AM», «9:02 AM» ...) в инструменте форматирования всплывающей подсказки, но он не работал. Любое предложение?

var spark1 = {
  chart: {
    id: 'sparkline1',
    type: 'line',
    height: 200,
    sparkline: {
      enabled: true
    },
    group: 'sparklines'
  },
  series: [{
    name: 'wake-up time',
    data: [{x: '05/06/2014', y:'8:50 AM'}, {x: '05/07/2014', y:'11:00 AM'}, {x: '05/08/2014', y:'9:02 AM'}, {x: '05/09/2014', y:'10:47 AM'}]
  }],
  tooltip: {
    x: {
      show: false
    },
    y: {
      formatter: function(value){
      return value.toString();
       }
    }
  }
 }
}

1 Ответ

1 голос
/ 03 октября 2019

диаграмма ожидает, что число будет предоставлено для y.
, если предоставлена ​​строка, она попытается проанализировать ее для числа, используя parseFloat, или что-то подобное.
, поэтому числаокруглый.

parseFloat('8:50 AM') = 8

, поэтому, если у вас есть что-то вроде '1:00 PM', вы не получите нужную строку.

Вместо этого преобразуйте значения в истинную дату, а затем извлеките значение времени.

мы можем сделать это, создав новую дату с указанием даты и времени.
затем создайте другую дату только с частью даты и вычтите ее из предыдущей.

мы сохраним данные диаграммы в переменной.

var chartData = [{x: '05/06/2014', y: '8:50 AM'}, {x: '05/07/2014', y: '11:00 AM'}, {x: '05/08/2014', y: '9:02 AM'}, {x: '05/09/2014', y: '10:47 AM'}];

, затем сопоставьте его с диаграммой.

  data: chartData.map(function (row) {
    // create full date time
    var rowDate = new Date(row.x + ' ' + row.y);

    // subtract date only from full date time
    var rowTime = rowDate.getTime() - (new Date(row.x)).getTime();

    // return new data point
    return {x: row.x, y: rowTime};
  })

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

    formatter: function(value, series) {
      // use series argument to pull original string from chart data
      return chartData[series.dataPointIndex].y;
    }

см. Следующий рабочий фрагмент ...

$(document).ready(function() {
  var chartData = [{x: '05/06/2014', y: '8:50 AM'}, {x: '05/07/2014', y: '11:00 AM'}, {x: '05/08/2014', y: '9:02 AM'}, {x: '05/09/2014', y: '10:47 AM'}];

  var spark1 = {
    chart: {
      id: 'sparkline1',
      type: 'line',
      height: 200,
      sparkline: {
        enabled: true
      },
      group: 'sparklines'
    },
    series: [{
      name: 'wake-up time',
      data: chartData.map(function (row) {
        // create full date time
        var rowDate = new Date(row.x + ' ' + row.y);

        // subtract date only from full date time
        var rowTime = rowDate.getTime() - (new Date(row.x)).getTime();

        // return new data point
        return {x: row.x, y: rowTime};
      })
    }],
    tooltip: {
      x: {
        show: false
      },
      y: {
        formatter: function(value, series) {
          // use series argument to pull original string from chart data
          return chartData[series.dataPointIndex].y;
        }
      }
    }
  };

  var chart = new ApexCharts(
    document.getElementById('sparkline1'),
    spark1
  );

  chart.render();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
<div id="sparkline1"></div>
...