Как отобразить точные данные по оси значений на диаграмме amchart XY без автоматического округления десятичных дробей? - PullRequest
1 голос
/ 07 ноября 2019

Я возился с этим кодом amchart 4 в течение нескольких дней, но все еще не мог заставить его точно отображать данные оси Y, он всегда имеет тенденцию округлять его или увеличивать

Я пробовал параметр maxprecision, параметры числового формата и многие другие параметры и все еще не могут быть проанализированы должным образом, данные загружаются через json, но для jsfiddle я создал аналогичные временные данные в javascript

chart.data = 
[{"date":"2019-11-07","value":0.0051},
{"date":"2019-11-06","value":0.0063},
{"date":"2019-11-05","value":0.0059},
{"date":"2019-11-04","value":0.0071},
{"date":"2019-11-03","value":0.0101},
{"date":"2019-11-02","value":0.0113},
{"date":"2019-11-01","value":0.0101}];

Так что по оси Yне показывает значение как 0,0101, вместо этого его округляют до 0,01 вместо

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

https://jsfiddle.net/6gck9yz8/

1 Ответ

1 голос
/ 10 ноября 2019

Это ValueAxis. Он показывает абстрактную шкалу значений с сеткой значений, которые соответствуют определенному диапазону значений и которые не обязательно соответствуют вашим фактическим точкам данных.

Вы можете увеличить гранулярность, уменьшив minGridDistance средства визуализации оси. Например:

valueAxis.renderer.minGridDistance = 10;

Подробнее о плотности сетки оси .

Это сделает сетку / метки более частыми и, следовательно, более точными, но не гарантирует, что этисоответствуют фактическим точкам данных.

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

Подробнееинформация о диапазонах осей в качестве направляющих .

Вы можете автоматизировать ее, просматривая все данные и размещая диапазон осей для каждого значения:

for(var i = 0; i < chart.data.length; i++) {
  var range = valueAxis.axisRanges.create();
  range.value = chart.data[i].value;
  range.label.text = chart.data[i].value + "";
  range.grid.stroke = am4core.color("#396478");
  range.grid.strokeOpacity = 0.5;
}

Вот обновленная версия вашей скрипки.

Если вы запустите это, вы поймете, почему плохая идея размещать сетку / метки с точными значениями;)

enter image description here

...