【问题标题】:How to add label in chart.js for pie chart如何在chart.js中为饼图添加标签
【发布时间】:2014-04-26 18:51:52
【问题描述】:

我正在显示饼图。但是如何在饼图中显示标签。

下面是饼图的chart.js代码。

this.Pie = function(data, options) {

  chart.Pie.defaults = {
    segmentShowStroke: true,
    segmentStrokeColor: "#fff",
    segmentStrokeWidth: 2,
    animation: true,
    animationSteps: 100,
    animationEasing: "easeOutBounce",
    animateRotate: true,
    animateScale: false,
    onAnimationComplete: null
  };

  var config = (options) ? mergeChartConfig(chart.Pie.defaults, options) : chart.Pie.defaults;

  return new Pie(data, config, context);
};

下面是显示饼图的html文件代码

代码:

var data = [{
  value: 20,
  color: "#637b85"
}, {
  value: 30,
  color: "#2c9c69"
}, {
  value: 40,
  color: "#dbba34"
}, {
  value: 10,
  color: "#c62f29"
}];

var canvas = document.getElementById("hours");
var ctx = canvas.getContext("2d");
new Chart(ctx).Pie(data);

【问题讨论】:

    标签: javascript charts


    【解决方案1】:

    没有必要使用像 newChart 这样的其他库或使用其他人的拉取请求来实现这一点。您所要做的就是定义一个选项对象,然后在工具提示中的任意位置添加标签。

    var optionsPie = {
        tooltipTemplate: "<%= label %> - <%= value %>"
    }
    

    如果您希望始终显示工具提示,您可以对选项进行一些其他编辑:

     var optionsPie = {
            tooltipEvents: [],
            showTooltips: true,
            onAnimationComplete: function() {
                this.showTooltip(this.segments, true);
            },
            tooltipTemplate: "<%= label %> - <%= value %>"
        }
    

    在您的数据项中,您必须添加所需的标签属性和值,仅此而已。

    data = [
        {
            value: 480000,
            color:"#F7464A",
            highlight: "#FF5A5E",
            label: "Tobacco"
        }
    ];
    

    现在,您只需将数据后面的选项对象传递给新的 Pie,如下所示:new Chart(ctx).Pie(data,optionsPie),您就完成了。

    这可能最适合体积不是很小的馅饼。

    Pie chart with labels

    【讨论】:

    【解决方案2】:

    编辑:http://jsfiddle.net/nCFGL/223/ 我的例子。

    您应该能够喜欢以下内容:

    var pieData = [{
        value: 30,
        color: "#F38630",
        label: 'Sleep',
        labelColor: 'white',
        labelFontSize: '16'
      },
      ...
    ];
    

    包括位于以下位置的 Chart.js:

    https://github.com/nnnick/Chart.js/pull/35

    【讨论】:

    【解决方案3】:

    Rachel 的解决方案运行良好,但您需要使用来自raw.githubusercontent.com 的第三方脚本

    现在,他们在为“模块化”脚本做广告时会在着陆页上显示一项功能。您可以在那里看到具有这种结构的图例:

    <div class="labeled-chart-container">
        <div class="canvas-holder">
            <canvas id="modular-doughnut" width="250" height="250" style="width: 250px; height: 250px;"></canvas>
        </div>
    
    <ul class="doughnut-legend">
        <li><span style="background-color:#5B90BF"></span>Core</li>
        <li><span style="background-color:#96b5b4"></span>Bar</li>
        <li><span style="background-color:#a3be8c"></span>Doughnut</li>
        <li><span style="background-color:#ab7967"></span>Radar</li>
        <li><span style="background-color:#d08770"></span>Line</li>
        <li><span style="background-color:#b48ead"></span>Polar Area</li>
    </ul>
    </div>
    

    为此,他们使用图表配置选项legendTemplate

    legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<segments.length; i++){%><li><span style=\"background-color:<%=segments[i].fillColor%>\"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>"
    

    您可以在chartjs.org 上找到文档 这适用于所有图表,尽管它不是 global chart configuration 的一部分。

    然后他们创建图例并将其添加到 DOM,如下所示:

    var legend = myPie.generateLegend();
    $("#legend").html(legend);
    

    示例 另见我的JSFiddle sample

    【讨论】:

    • 有没有办法可以在生态模板中重新创建这个图例并链接到该模板?
    • @TomHammond 我不知道生态模板是什么。当然,您可以再次调用generateLegend() 函数并在DOM 中替换它。我认为没有链接模板的方法,但您可以使用源文件中的脚本导入它,并设置一个变量,如 legendTemplate: &lt;your imported string&gt;
    • 我需要进行一些修改才能使其工作:“data”而不是“segment”,“color”而不是“fillColor”,class="legend"(当然我改变了样式类也是如此。
    【解决方案4】:

    使用ChartNew.js 代替 Chart.js

    ...

    所以,我重新设计了 Chart.js。大多数更改都与 Chart.js 的“GitHub”问题中的请求相关。

    这是一个示例http://jsbin.com/lakiyu/2/edit

    var newopts = {
        inGraphDataShow: true,
        inGraphDataRadiusPosition: 2,
        inGraphDataFontColor: 'white'
    }
    var pieData = [
        {
            value: 30,
            color: "#F38630",
        },
        {
           value: 30,
           color: "#F34353",
        },
        {
            value: 30,
            color: "#F34353",
        }
    ]
    var pieCtx = document.getElementById('pieChart').getContext('2d');
    new Chart(pieCtx).Pie(pieData, newopts);
    

    它甚至提供了一个 GUI 编辑器http://charts.livegap.com/

    好甜。

    【讨论】:

    • 非常感谢,因为 ChartJs 被放弃了,所以要切换到这个版本 =)
    • @zumbamusic,chart.js 没有被抛弃。也许是一次。现在非常健康。
    【解决方案5】:

    对于使用较新版本 Chart.js 的用户,您可以通过在 options 中设置 tooltips.callbacks.label 的回调来设置标签。

    例如:

    var chartOptions = {
        tooltips: {
            callbacks: {
                label: function (tooltipItem, data) {
                    return 'label';
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多