如何在 DataTable 中使用千 (,) 格式化值,我正在使用 JavaScript highcharts.com 库?

How can I format a value with thousands (,) in the DataTable, I am using the JavaScript highcharts.com library?

提问人:Sergio241 提问时间:11/14/2023 最后编辑:Krzysztof KrzeszewskiSergio241 更新时间:11/16/2023 访问量:71

问:

我正在尝试用千或(,)格式化我的dataTable。但是我没能做到,我看过论坛,我没能做到,我会和你分享我的代码。变量 Venta 是 theq 我想在图表和 dataTable 中格式化 data: sale。

<div class="">
    <figure class="highcharts-figure">
        <div id="container"></div>
    </figure>
</div>

<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/export-data.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://code.highcharts.com/modules/accessibility.js"></script>
<script>
Highcharts.chart('container', {
     chart: {
         type: 'column'
     },
     title: {
         text: 'Ventas Mensuales',
         align: 'left',
         style: {
             fontSize: '16px' 
         }
     },
     xAxis: {
         categories: mes, // What returns mes is ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre','Octubre', 'Noviembre', 'Diciembre'];
         crosshair: true,
         accessibility: {
             description: 'Meses'
         }
     },
     yAxis: {
         min: 0,
         title: {
             text: 'Ventas Mensuales'
         }
     },
     tooltip: {
         valueSuffix: ' (COP)'
     },
     plotOptions: {
         column: {
             pointPadding: 0.2,
             borderWidth: 0,
             dataLabels: {
                 enabled: true,
                 formatter: function() {
                     return '$' + Highcharts.numberFormat(this.y, 0);
                 }
             }
         }
     },
     series: [{
         name: 'Ventas',
         data: venta // What returns is ['1356940858.000000', '1945419126.000000', '934706589.000000', '1803607453.000000', '78415027.000000'] 
         // data: valoresY
     }],
     data: {
         table: 'datatable'
     },
     exporting: {
         tableCaption: "Tabla de Ventas Mensualesss"
     }

 });
</script>```

Esperaba el valor del dataTable export formateado en miles 
JavaScript 图表 HighCharts

评论


答:

0赞 Krzysztof Krzeszewski 11/14/2023 #1

如果希望图表值具有千位分隔符,可以通过设置全局选项来设置它们:

Highcharts.setOptions({
    lang: {thousandsSep: ','}
});

如果要设置标签的格式,可以在值之后传递自定义格式,因此在您的情况下:

yAxis: {
    labels: {
        format: '{value:,.0f}'
    }
}

举个例子:

Highcharts.setOptions({
  lang: {
    thousandsSep: ','
  }
});
Highcharts.chart('container', {
  chart: {
    type: 'column'
  },
  yAxis: {
    labels: {
      format: '{value:,.0f}'
    }
  },
  xAxis: {
    categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
  },
  series: [{
    data: [1000000, 2000000, 3000000, 4000000, 5000000]
  }]
});
<div class="">
<figure class="highcharts-figure">
    <div id="container"></div>
</figure>
</div>

<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/export-data.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://code.highcharts.com/modules/accessibility.js"></script>

评论

0赞 Sergio241 11/15/2023
1.非常感谢,它帮助我用数千个分隔符格式化图表,这部分已经对我有用了。2. 现在我想格式化实现 Higchart 库的 dataTable,特别是这部分,它在图形菜单中向我显示一个 dataTable(查看数据表)。[在此输入图片描述][1] [在此处输入图像描述][2] [1]:i.stack.imgur.com/UQ5Uy.png [2]:i.stack.imgur.com/x8uEB.png<script src="https://code.highcharts.com/modules/export-data.js"></script>
0赞 Krzysztof Krzeszewski 11/15/2023
每个问题都应集中在一个问题上
0赞 Sergio241 11/15/2023
这就是我从一开始就想要的,我不知道我是否清楚。
0赞 Halvor Holsten Strand 11/15/2023 #2

您可以扩展该模块以对数据表中显示的值进行格式设置,例如,如下所示(请参阅 JSFiddle 演示):export-data

(function(H) {
  const Chart = H.Chart;
  H.wrap(Chart.prototype, 'getDataRows', function(proceed, multiLevelHeaders) {
    const result = proceed.apply(this, Array.prototype.slice.call(arguments, 1));

    for (const x of result) {
      console.log(x, x.length)
      for (let i = 1; i < x.length; i++) {
        if (typeof x[i] === 'number') {
          x[i] = "$" + H.numberFormat(x[i], 0)
        }
      }
    }

    return result;
  });
}(Highcharts));

Highcharts.chart('container', {
  series: [{
    data: [100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000]
  }],
});

这里需要注意的是,它中断了按该列排序,因为它不再比较数字,而是比较字符串。简单的方法是禁用排序 (API)。一个复杂的变化是仅禁用按系列值排序,这是另一个扩展,例如如下所示(包含在上面的 JSFiddle 中):allowTableSorting

(function(H) {
  H.addEvent(Chart, 'afterViewData', function() {
    const div = this.dataTableDiv
    const row = div.querySelector('thead tr');
    if (row) {
      for (let x = 1; x < row.childNodes.length; x++) {
        const th = row.childNodes[x]
        const table = th.closest('table');
        th.addEventListener('click', function(e) {
          e.stopImmediatePropagation();
        });
      }
    }
  }, {
    order: -1
  });
}(Highcharts));

评论

0赞 Sergio241 11/16/2023
非常感谢,它非常有用,我不知道您可以扩展模块以格式化数据表中显示的值。export-data
0赞 Halvor Holsten Strand 11/16/2023
我之所以提出这个建议,是因为 API 似乎没有提供它。我使用源代码来查找潜在的扩展