图例配置

显示图表上出现的区域数据集的图例。

配置选项

图例配置在 options.legend 中.全局配置在 Chart.defaults.global.legend

名称类型默认值描述
displayBooleantrue是否显示
positionString'top'位置 更多…
fullWidthBooleantrue是否铺满画布,此配置不常改变
onClickFunction标签项的回调事件
onHoverFunction'mousemove' 事件注册在标签项上时的回调
reverseBooleanfalse以相反的顺序显示数据集
labelsObject参阅下面的图例标签配置部分

位置

图例的位置选项:

  • 'top'
  • 'left'
  • 'bottom'
  • 'right'

图例标签配置

图例标签配置使用label关键字。

名称类型默认值描述
boxWidthNumber40宽度
fontSizeNumber12字体大小
fontStyleString'normal'字体样式
fontColorColor'#666'字体颜色
fontFamilyString"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif"字体集
paddingNumber10每个图例之间的间距
generateLabelsFunction为图例中的每个事物生成图例项目。默认实现返回颜色框的文本+样式。有关详细信息,请参阅图例项目
filterFunctionnull从图例中过滤图例。接收 2 个参数,图例项目>)和图表数据。
usePointStyleBooleanfalse标签样式将匹配相应的点样式(大小基于 fontSize,boxWidth 不在这种情况下使用)。

图例项目接口

传递给图例onClick函数的项目是从labels.generateLabels返回的项目。这些项目必须实现以下接口。

  1. {
  2. // 要显示的标签
  3. text: String,
  4. // 填充图例框的样式
  5. fillStyle: Color,
  6. // 如果为true,则表示隐藏的数据集。标签将以透视效果呈现。
  7. hidden: Boolean,
  8. // 边框 参考 https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/lineCap
  9. lineCap: String,
  10. // 边框 参考 https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash
  11. lineDash: Array[Number],
  12. // 边框 参考 https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset
  13. lineDashOffset: Number,
  14. // 边框 参考 https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin
  15. lineJoin: String,
  16. // 边框宽度
  17. lineWidth: Number,
  18. // 图例框的描边样式
  19. strokeStyle: Color
  20. // 图例框的点样式(仅当usePointStyle为true时才使用)
  21. pointStyle: String
  22. }

示例

以下示例将创建一个启用了legend的图表,并将所有文本的颜色变为红色。

  1. var chart = new Chart(ctx, {
  2. type: "bar",
  3. data: data,
  4. options: {
  5. legend: {
  6. display: true,
  7. labels: {
  8. fontColor: "rgb(255, 99, 132)"
  9. }
  10. }
  11. }
  12. });

自定义点击操作

点击legend中的项目触发不同的行为,可以通过在配置对象中使用回调来轻松实现。

默认操作为:

  1. function(e, legendItem) {
  2. var index = legendItem.datasetIndex;
  3. var ci = this.chart;
  4. var meta = ci.getDatasetMeta(index);
  5. // See controller.isDatasetVisible comment
  6. meta.hidden = meta.hidden === null? !ci.data.datasets[index].hidden : null;
  7. // We hid a dataset ... rerender the chart
  8. ci.update();
  9. }

假设我们希望链接前两个数据集的显示。我们可以相应地更改click handler。

  1. var defaultLegendClickHandler = Chart.defaults.global.legend.onClick;
  2. var newLegendClickHandler = function(e, legendItem) {
  3. var index = legendItem.datasetIndex;
  4. if (index > 1) {
  5. // Do the original logic
  6. defaultLegendClickHandler(e, legendItem);
  7. } else {
  8. let ci = this.chart;
  9. [ci.getDatasetMeta(0), ci.getDatasetMeta(1)].forEach(function(meta) {
  10. meta.hidden =
  11. meta.hidden === null ? !ci.data.datasets[index].hidden : null;
  12. });
  13. ci.update();
  14. }
  15. };
  16. var chart = new Chart(ctx, {
  17. type: "line",
  18. data: data,
  19. options: {
  20. legend: {}
  21. }
  22. });

此时当你单击此图表中的legend时,前两个数据集的可见性将会链接在一起。

HTML Legends

有时你需要一个非常复杂的legend,在这种情况下有必要使用HTML legend。 图表在其原型上提供了一个generateLegend()方法,该方法返回legend的HTML字符串。

要配置如何生成此legend,可以更改legendCallback配置属性。

  1. var chart = new Chart(ctx, {
  2. type: "line",
  3. data: data,
  4. options: {
  5. legendCallback: function(chart) {
  6. // Return the HTML string here.
  7. }
  8. }
  9. });

请注意,legendCallback不会自动调用,你必须在使用此方法创建legend时自己在代码中调用generateLegend()