Detalhes do pacote

chart.js-plugin-labels-dv

DavideViolante14.3kMIT5.0.1-beta

Chart.js plugin to display labels on pie, doughnut and polar area chart.

chart, label, labels, plugin

readme (leia-me)

Maintainability npm Donate

NPM

Chart.js Plugin Labels for Chart.js v4+

Chart.js plugin to display labels on pie, doughnut and polar area chart. Forked from emn178/chartjs-plugin-labels.

Demo

  • Demo from the original repo using Chart.js v2.x, but it's almost the same.

Download

CDN Link

You can put the below link in the script tag

https://unpkg.com/chart.js-plugin-labels-dv/dist/chartjs-plugin-labels.min.js

Install from NPM

  • npm i chart.js-plugin-labels-dv

Usage

JavaScript

new Chart(ctx, {
  type: type,
  data: data,
  options: {
    plugins: {
      labels: {
        // render 'label', 'value', 'percentage', 'image' or custom function, default is 'percentage'
        render: 'value',
        // precision for percentage, default is 0
        precision: 0,
        // identifies whether or not labels of value 0 are displayed, default is false
        showZero: true,
        // font size, default is defaultFontSize
        fontSize: 12,
        // font color, can be color array for each data or function for dynamic color, default is defaultFontColor
        fontColor: '#fff',
        // font style, default is defaultFontStyle
        fontStyle: 'normal',
        // font family, default is defaultFontFamily
        fontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
        // draw text shadows under labels, default is false
        textShadow: true,
        // text shadow intensity, default is 6
        shadowBlur: 10,
        // text shadow X offset, default is 3
        shadowOffsetX: -5,
        // text shadow Y offset, default is 3
        shadowOffsetY: 5,
        // text shadow color, default is 'rgba(0,0,0,0.3)'
        shadowColor: 'rgba(255,0,0,0.75)',
        // draw label in arc, default is false
        // bar chart ignores this
        arc: true,
        // position to draw label, available value is 'default', 'border' and 'outside'
        // bar chart ignores this
        // default is 'default'
        position: 'default',
        // draw label even it's overlap, default is true
        // bar chart ignores this
        overlap: true,
        // show the real calculated percentages from the values and don't apply the additional logic to fit the percentages to 100 in total, default is false
        showActualPercentages: true,
        // set images when `render` is 'image'
        images: [
          {
            src: 'image.png',
            width: 16,
            height: 16
          }
        ],
        // add padding when position is `outside`
        // default is 2
        outsidePadding: 4,
        // add margin of text when position is `outside` or `border`
        // default is 2
        textMargin: 4
      }
    }
  }
});

// custom render
{
  render: function (args) {
    // args will be something like:
    // { label: 'Label', value: 123, percentage: 50, index: 0, dataset: {...} }
    return '$' + args.value;
    // return object if it is image
    // return { src: 'image.png', width: 16, height: 16 };
  }
}

// dynamic fontColor
{
  fontColor: function (args) {
    // args will be something like:
    // { index: 0, dataset: {...} }
    return myColorTransfer(args.dataset.backgroundColor[index]);
  }
}

Support multiple options, eg.

labels: [
  {
    render: 'label',
    position: 'outside'
  },
  {
    render: 'value'
  }
]

Default options

Chart.defaults.plugins.labels = {
  // ...
};

React

From https://github.com/DavideViolante/chartjs-plugin-labels/issues/5#issuecomment-1237995604

import React from 'react';
import { Chart } from 'chart.js';
import * as helpers from 'chart.js/helpers';

export const LabelPluginProvider: React.FC = ({ children }) => {
  React.useEffect(() => {
    window.Chart = Chart;
    Chart.helpers = helpers;
    import('chart.js-plugin-labels-dv');
  }, []);
  return children;
};

Vue

From https://github.com/DavideViolante/chartjs-plugin-labels/issues/2#issuecomment-1483948596

import Chart from "chart.js/auto";
import * as helpers from "chart.js/helpers";

Then inside the created() hook:

async created() {
  window.Chart = Chart;
  Chart.helpers = helpers;
  awaitimport("chart.js-plugin-labels-dv");
}

Angular

Codesandbox example

You would need to create your own chart component.

<div class="chart">
  <canvas [id]="name"></canvas>
</div>

Importing should be straightforward

import Chart from 'chart.js/auto';
import { getChartLabelPlugin, PLUGIN_ID } from 'chart.js-plugin-labels-dv';
@Input() chartConfig: any;
@Output() chartCreated: EventEmitter<Chart> = new EventEmitter<Chart>();

public readonly name: string = `chart-${ChartComponent.instanceCount++}`;
private chart: Chart;

ngAfterViewInit(): void {
  this.createChart();
}

private createChart(): void {
  if (!this.hasRegisteredPlugin()) {
    Chart.register(getChartLabelPlugin());
  }

  this.chart = new Chart(this.name, this.chartConfig);
  this.chartCreated.emit(this.chart);
}

private hasRegisteredPlugin(): boolean {
    return !!Chart.registry?.plugins.get(PLUGIN_ID);
}

For fixing the module failed compilation error I have updated tsconfig as follows:

Error: Module build failed (from ./node_modules/@ngtools/webpack/src/ivy/index.js):
Error: /node_modules/chart.js-plugin-labels-dv/src/chart-label.ts is missing from the TypeScript compilation.
Please make sure it is in your tsconfig via the 'files' or 'include' property.

tsconfig.json

"files": [
  ...
  "node_modules/chart.js-plugin-labels-ed/src/chart-label.ts"
],

Test it out with data from the official Chart.js website: https://www.chartjs.org/docs/latest/charts/doughnut.html#pie

License

MIT license.

Contact

The project's website is located at https://github.com/emn178/chartjs-plugin-labels
Authors: Chen, Yi-Cyuan (emn178@gmail.com), Davide Violante, eduard-landclan

changelog (log de mudanças)

Change Log

v5.0.1-beta / 2023-07-03

  • Fix main in package.json
  • Update deps
  • Add tsc build into build script
  • Correct version on JS version

v5.0.0-beta / 2023-07-03

Added

  • Angular support with usage example

Changed

  • Add support for Chart.js v4.3 !BREAKING
  • TypeScript refactoring of the initial plugin source
  • TypeScript eslint support
  • Extracted ChartLabel – this holds a large chunk of the initial logic
  • Extracted getChartLabelPlugin() method – which can be used to register chart plugin

v3.0.0 / 2021-05-26

Added

  • Add support for Chart.js v3

Refactoring

  • Add ESLint to dev dependencies to autofix code
  • Add rollup to dev dependencies to generate bundle

v1.1.0 / 2018-09-24

Added

  • bar suuport. #71

Fixed

  • support IE11 #74

v1.0.1 / 2018-08-27

Fixed

  • tries to render labels on line-chart #70
  • reop: Label possition conflict when using doughnutlabel plugin. #67

v1.0.0 / 2018-08-21

Changed

  • package name and usage follows Chart.js plugin rules. #66
  • option overlap default true.
  • require Chart.js 2.6.0+

Removed

  • option mode
  • option format

Improve

  • refactor code structure.

v0.15.0 / 2018-08-18

Fixed

  • Label possition conflict when using doughnutlabel plugin. #67

Added

  • polarArea suuport. #37

v0.14.1 / 2018-08-12

Fixed

  • text.split is not a function.

v0.14.0 / 2018-08-08

Added

  • multiple options support. #18

v0.13.0 / 2018-08-07

Added

  • multiple lines support. #31

v0.12.0 / 2018-07-30

Fixed

  • outside label position. #45, #61
  • 'afterDatasetsDraw' of undefined #60

v0.11.0 / 2018-06-10

Added

  • option textMargin. #54
  • option text shadow. #56

v0.10.0 / 2017-11-19

Added

  • option outsidePadding. #42

Fixed

  • render stopped if label is empty.

v0.9.0 / 2017-11-19

Added

  • option showActualPercentages. #42

Fixed

  • numbers as labels. #38

v0.8.2 / 2017-10-25

Added

  • dataset and index parameters to render. #35
  • Chart not defined check for SSR #33

v0.8.1 / 2017-09-07

Added

  • dataset and index parameters to fontColor. #32

v0.8.0 / 2017-08-29

Added

  • option fontColor can be function. #29
  • option render can be 'image'. #19

v0.7.0 / 2017-08-03

Added

  • option overlap. # 25
  • option render can be custom function. #21, #24
  • option fontColor can be array. #20

Changed

  • option mode rename to render, mode still works.

Deprecated

  • option mode.
  • option format.

v0.6.0 / 2017-07-07

Added

  • option showZero. # 14

Fixed

  • outside label overlap in some cases.

v0.5.0 / 2017-06-15

Fixed

  • bug #12

Changed

  • drop support for chart.js below v2.1.5

v0.4.0 / 2017-05-26

Added

  • option position, available value is 'default', 'border' and 'outside'. # 8

Changed

  • option arcText rename to arc.
  • option borderText remove and replace by position with value 'border'.

v0.3.0 / 2017-04-10

Added

  • borderText feature. #2

Fixed

  • percentage not visible on last segment of chart. #3, #4

v0.2.0 / 2017-03-02

Added

  • arcText feature.
  • format feature.

v0.1.0 / 2017-01-11

Added

  • First version implementation.