简体   繁体   English

Chartjs条形图传奇

[英]Chartjs Bar Chart Legend

I am having problems getting a legend to show up on the bar graph that I have created using chartjs. 我在使用chartjs创建的条形图上显示传奇时遇到问题。 The documentation talks about a legend template, but I can't seem to find a good example of how to implement this into the graph. 该文档讨论了一个图例模板,但我似乎找不到如何将其实现到图中的好例子。 Below is the code I am using to generate the graph. 下面是我用来生成图表的代码。

<div style="width: 100%;">
  <canvas id="canvas" height="450" width="600"></canvas>
<div id="legendDiv">&nbsp;</div>
</div>
<script>
    var randomScalingFactor = function(){ return Math.round(Math.random()*100)};

    var barChartData = {
        labels : ["Item 1","Item 2","Item 3","Item 4","Item 5","Item 6","Item 7","Item 8","Item 9","Item 10","Item 11","Item 12","Item 13","Item 14","Item 15","Item 16","Item 17"]
        datasets : [
            {
                fillColor : "rgba(166,166,166,0.5)",
                strokeColor : "rgba(166,166,166,0.8)",
                highlightFill: "rgba(166,166,166,0.75)",
                highlightStroke: "rgba(166,166,166,1)",
                data : [10,4,3,4,3,6,4,1,10,3,3,10,2,4,10,3,4]

             },
            {
                fillColor : "rgba(196,64,54,0.5)",
                strokeColor : "rgba(196,64,54,0.8)",
                highlightFill : "rgba(196,64,54,0.75)",
                highlightStroke : "rgba(196,64,54,1)",
                data : [6,3,2,3,2,3,4,1,8,3,3,6,1,3,8,3,4]
            }
        ]

    }
    window.onload = function(){
        var ctx = document.getElementById("canvas").getContext("2d");
        window.myBar = new Chart(ctx).Bar(barChartData, {
        responsive : true
         });
     }

     </script>
 <div>

THE BELOW ANSWER IS FOR CHARTJS 1.X 以下答案适用于CHARTJS 1.X.

So below is an example of how you can set up a legend using the labels that need to be given which each dataset, using the default legend template all you have to do is call generateLegend() on the chart and then place this on the page 下面是一个如何使用需要给出的标签设置图例的示例,每个数据集使用默认的图例模板,您只需在图表上调用generateLegend() ,然后将其放在页面上

 var helpers = Chart.helpers; var canvas = document.getElementById('bar'); var randomScalingFactor = function() { return Math.round(Math.random() * 100) }; var barChartData = { labels: ["January", "February", "March", "April", "May", "June", "July"], datasets: [{ label: "My First dataset", fillColor: "rgba(220,220,220,0.5)", strokeColor: "rgba(220,220,220,0.8)", highlightFill: "rgba(220,220,220,0.75)", highlightStroke: "rgba(220,220,220,1)", data: [randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor()] }, { label: "My Second dataset", fillColor: "rgba(151,187,205,0.5)", strokeColor: "rgba(151,187,205,0.8)", highlightFill: "rgba(151,187,205,0.75)", highlightStroke: "rgba(151,187,205,1)", data: [randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor()] }] } // var bar = new Chart(canvas.getContext('2d')).Bar(barChartData, { tooltipTemplate: "<%if (label){%><%=label%>: <%}%><%= value %>kb", animation: false, }); // var legendHolder = document.createElement('div'); legendHolder.innerHTML = bar.generateLegend(); document.getElementById('legend').appendChild(legendHolder.firstChild); 
 ul { list-style: none; } ul li { display: block; padding-left: 30px; position: relative; margin-bottom: 4px; border-radius: 5px; padding: 2px 8px 2px 28px; font-size: 14px; cursor: default; height:20px; width: 140px; -webkit-transition: background-color 200ms ease-in-out; -moz-transition: background-color 200ms ease-in-out; -o-transition: background-color 200ms ease-in-out; transition: background-color 200ms ease-in-out; } li span { display: block; position: absolute; left: 0; top: 0; width: 20px; border-radius: 5px; height:20px } li span.bar-legend-text { left:25px; width:120px; } #chart-area > *{ float:left } 
 <script src="https://raw.githack.com/chartjs/Chart.js/v1.1.1/Chart.min.js"></script> <div id="chart-area"> <canvas id="bar" width="250" height="250" style="width: 250px; height: 250px;"></canvas> <div id="legend"></div> </div> 

http://jsfiddle.net/masiht/r5g6a3cd/ http://jsfiddle.net/masiht/r5g6a3cd/

I have an answer and it is working fine... 我有一个答案,它工作正常......

 var ctx = document.getElementById("canvas").getContext("2d"); new Chart(ctx).HorizontalBar(barChartLocData, { responsive: true, scaleFontColor: "#000", showTooltips: false, onAnimationComplete: function() { var ctx = this.chart.ctx; ctx.font = this.scale.font; ctx.fillStyle = this.scale.textColor ctx.textAlign = "right"; ctx.textBaseline = "right"; this.datasets.forEach(function(dataset) { dataset.bars.forEach(function(bar) { ctx.fillText(bar.value, bar.x, bar.y - 5); }); }); } }); 

Try this 尝试这个

    var data = {
        labels: ["January", "February", "March", "April", "May", "June", "July"],
        datasets: [
            {
                label: "My First dataset",
                fillColor: "rgba(151,187,205,0.5)",
                strokeColor: "rgba(151,187,205,0.8)",
                highlightFill: "rgba(151,187,205,0.75)",
                highlightStroke: "rgba(151,187,205,1)",
                data: [28, 48, 40, 19, 86, 27, 90]
            }
        ]
    };
    var context = document.getElementById('clients').getContext('2d');
    var clientsChart = new Chart(context).Bar(data);

HTML: HTML:

 <canvas id="clients" width="450" height="350"></canvas>

http://jsfiddle.net/TZq6q/299/ http://jsfiddle.net/TZq6q/299/

For the latest Version 2.6.0, it can be done using legendCallback 对于最新的2.6.0版,可以使用legendCallback完成

Set the template for the legends: 设置图例的模板:

  legendCallback: function(chart) {
    var text = [];
    text.push('<ul>');
    for (var i=0; i<chart.data.datasets.length; i++) {
      console.log(chart.data.datasets[i]); // see what's inside the obj.
      text.push('<li>');
      text.push('<span style="background-color:' + chart.data.datasets[i].borderColor + '">' + chart.data.datasets[i].label + '</span>');
      text.push('</li>');
    }
    text.push('</ul>');
    return text.join("");
  },

Add html element to target for the location of the legends. 将html元素添加到目标以获取图例的位置。

<div id="chart-legends"></div>

Then generate the legends: 然后生成传说:

document.getElementById('chart-legends').innerHTML = myChart.generateLegend();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM