如何使图例右侧出现图例(Chart.JS)?

时间:2016-09-22 17:35:10

标签: chart.js pie-chart chart.js2

我正在使用Chart.JS创建一个相当简单的饼图:

var data = {
    labels: [
        "Bananas (18%)",
        "Lettuce, Romaine (14%)",
        "Melons, Watermelon (10%)",
        "Pineapple (10%)",
        "Berries (10%)",
        "Lettuce, Spring Mix (9%)",
        "Broccoli (8%)",
        "Melons, Honeydew (7%)",
        "Grapes (7%)",
        "Melons, Cantaloupe (7%)"
    ],
    datasets: [
        {
            data: [2755, 2256, 1637, 1608, 1603, 1433, 1207, 1076, 1056, 1048],
            backgroundColor: [
                "#FFE135",
                "#3B5323",
                "#fc6c85",
                "#ffec89",
                "#021c3d",
                "#3B5323",
                "#046b00",
                "#cef45a",
                "#421C52",
                "#FEA620"
            ]
        }
    ]
};

var optionsPie = {
    responsive: true,
    scaleBeginAtZero: true,
    tooltips: {
        callbacks: {
            label: function (tooltipItem, data) {
                return data.labels[tooltipItem.index] + ": " +
                    formatter.format(data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index]);
            }
        }
    }
};

var ctx = $("#top10ItemsChart").get(0).getContext("2d");
var top10PieChart = new Chart(ctx,
{
    type: 'pie',
    data: data,
    options: optionsPie
});

$("#top10Legend").html(top10PieChart.generateLegend());

看起来不错:

enter image description here

...但是我想要左边的饼图和右边的图例,图例是垂直堆叠的。我怎样才能实现这一目标?

更新

我试过了:

CSS

.pieLegend li span {
    display: inline-block;
    width: 12px;
    height: 12px;
    margin-right: 5px;
}

HTML

<div id="pie_legend" class="pieLegend"></div>

...如接受的答案here中所述,但它没有任何区别。

更新2

修复错误ID会导致显示新图例,并添加&#34; display:false&#34;选项导致原来的一个消失,但新的一个仍然出现在馅饼下面,挤在它的div外面并流入它下面的象限(显示盘旋在香蕉上):

enter image description here

更新3

以下是应用已接受答案代码的外观:

enter image description here

馅饼仍然微不足道,但这比它好多了(并回答了问题)。

2 个答案:

答案 0 :(得分:1)

您必须先使用以下选项关闭选项中的默认图例:

legend: {
        display: false
},

您的传奇的id选择器也是错误的。 Fiddle

将图表包裹在<div>中并设置其高度和宽度,因为画布将响应其容器,然后设置画布的div和图例&#39; s divdisplay:inline-block

HTML

<div id="kpi">
    <div id="container">
      <canvas id="top10ItemsChart"></canvas>
    </div>
    <div id="top10Legend" class="pieLegend"></div>
</div>

CSS

 #kpi{
      height: 400px;
      width: 100%;
      border: 1px solid black;
      background-color: white;
    }
    .pieLegend li span {
      display: inline-block;
      width: 12px;
      height: 12px;
      margin-right: 5px;
    }

    #top10Legend {
      display: inline-block;
    }

    #container {
      display: inline-block;
      height: 50%;
      width: 50%;
    }

    #top10Legend>ul{
      list-style:none;
    }

答案 1 :(得分:1)

右对齐图例的另一种方法是添加:

legend: {
   position:"right"
}

到图表选项

JSfiddle