javascript - 在 amcharts 条形图上显示百分比

标签 javascript amcharts

我是 Amcharts 的新手,我正在尝试在柱形图中显示数据的百分比。

var amc=AmCharts.makeChart("pickup_bar",
        {
    "type": "serial",
    "dataLoader": {
        "url": "the data url"
      },
    "categoryField": "distance",
    "startDuration": 1,
    "categoryAxis": {
        "gridPosition": "start"
    },
    "trendLines": [],
    "graphs": [
        {
        "valueField": "taxi",
        "fillColors":"#1E90FF",
        "type": "column",
        "balloonText": "[[title]] of [[category]]:[[value]]",
        "fillAlphas": 0.8,
        "lineAlpha": 0.2,
        "id": "AmGraph-1",
        "title": "Distance Traveled",

        "labelText": " ",
        "labelPosition": "inside",

        "labelFunction": function( item ) {
            var total = 0;
            for ( var i = 0; i < chart.dataLoader.length; i++ ) {
              total += chart.dataLoader[ i ][ item.graph.valueField ];
            }

            var percent = Math.round( ( item.values.value / total ) * 1000 ) / 10;
            return percent + "%";
          }
    }],
"guides": [],
"valueAxes": [
    {
        "id": "ValueAxis-1",
        "title": "Milage",
        "gridColor": "#FFFFFF",
        "gridAlpha": 0.2
    }
],
"categoryAxis": {
    "title": "(in Kilometers)"
  },
"gridAboveGraphs": true,
"allLabels": [],
"balloon": {},
"legend": {
    "enabled": true,
    "useGraphSettings": true
},
"titles": [
    {
        "id": "Title-1",
        "size": 15,
        "text": "Taxis Driving Distance "
    }
]
});

数据格式为json,如下

> [{"distance":"<50","taxi":309,"day":1},{"distance":"50-100","taxi":100,"day":1},{"distance":"100-200","taxi":300,"day":1},...]

图表正在加载,但当我删除该行时

"labelPosition": "inside",

显示图表,但不显示百分比。

有人可以帮忙吗?

最佳答案

您的代码中存在一些问题。

首先,您正在访问未定义的图表变量。您的代码将图表对象分配给 amc。您需要更改代码以匹配,或通过 item.graph.chart 访问图表实例。

其次,您将循环访问 labelFunction 中的 dataLoader 而不是 dataProvider。 dataLoader 对象不存储图表数据,它只是在从指定 URL 检索数据后将数据加载到图表的 dataLoader 中。这是您的固定 labelFunction:

    "labelFunction": function(item) { 
      var total = 0;
      var chart = item.graph.chart;
      for (var i = 0; i < chart.dataProvider.length; i++) {
        total += chart.dataProvider[i][item.graph.valueField];
      }

      var percent = Math.round((item.values.value / total) * 1000) / 10;
      return percent + "%";
    } 

在我进行这些更改后,标签将与您的数据一起显示。如果您仍然看不到标签,则可能您在有限的空间内拥有大量数据。默认情况下,如果图表不适合图表值标签,则不会呈现图表值标签。如果您想覆盖此行为,请设置图表的 showAllValueLabels属性为 true。

Demo

关于javascript - 在 amcharts 条形图上显示百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41029830/

相关文章:

javascript - amCharts dateAxis 只显示时间不显示日期

javascript - 为什么我的 Materialise 可折叠菜单在使用 f :ajax (JSF)? 更新后不起作用

javascript - amcharts 交互式 map : making selected states a clickable link

javascript - 在 Amcharts 中动态创建多级钻取

javascript - amcharts 在 Android web View 中不显示主题背景

javascript - 使用鼠标滚轮在桌面上的 Sencha Touch 应用程序中滚动

javascript - VS 代码中的 JSDoc,用于记录具有模块类型的函数

javascript - 如何找出创建 bootstrap-material 的位置

javascript - 仅单击一次 datepicker td 有效

javascript - 使用 AmCharts map 时通过点击事件获取值(value)