我想做一个甜甜圈图表,每个弧形都有一个特定格式的字符串.ChartJSImage中的选项有限,我想知道这是否可能.更清楚地说,第一张照片是我得到的,第二张照片是我想要的.

  1. What I am getting What I am getting

  2. What I want What I want

这个问题看起来很简单,但我觉得ChartJSImage非常有限,我找不到解决方案.以下是我try 过的代码

const line_chart =  ChartJSImage().chart({
  "type": "doughnut",
  "data": { 
  labels: [
    'Carbs',
    'Protien',
    'Fats'
  ],
  options: {
  plugins: { 
    legend: { // i assumed that I had to put the legend key? still did not work.
      display: true,
      position: 'top',
      align: 'center'
    }
  }
},
datasets: [{
  label: 'Calorie Intake',
  data: [300, 50, 100], // I want to use each number in the array and then 'cal'
  backgroundColor: [
    'rgb(255, 99, 132)',
    'rgb(54, 162, 235)',
    'rgb(255, 205, 86)'
  ]
}],

}}) // Line chart
.backgroundColor('white')
.width(500) // 500px
.height(300); // 300px

line_chart.toFile('myimg.png')

如果甚至可以使用ChartJSImage将标签添加到甜甜圈,那么请告诉我如何操作.

提前谢谢你

推荐答案

简单的解决方案是使用chartjs-plugin chartjs-plugin-datalabels,check link /documentation of the plugin.

只需安装/或下载(checkout the get started section)

然后,在您的代码中,您只需加载插件,并配置您希望得到的图表的外观.

Here a short Demo, matching the needed output:
(Comments in the code mark settings/configuration that has to be added)

let data = {
  labels: [
    'Carbs',
    'Protien',
    'Fats'
  ],
  datasets: [{
    data: [70, 30, 50],
    backgroundColor: [
      'rgb(255, 99, 132)',
      'rgb(54, 162, 235)',
      'rgb(255, 205, 86)'
    ],
    
    // Configuring labels for the specific dataset
    datalabels: {
      anchor: 'center',
      backgroundColor: null,
      borderWidth: 0
    },
  }]
};

var options = {
  type: 'doughnut',
  data,
  
  // Adding the Plugin to the Chart
  plugins: [ChartDataLabels],
  
  options: {
    maintainAspectRatio: false,
    legend: { display: false },
    cutout: 20,
    plugins: {
    
      // Configuring the plugin
      datalabels: {
        color: 'white',
        formatter: function (value, context) {
          return `${value} cal`;
        },
        font: {
          weight: 'bold'
        },
        padding: 6,
      }
    },
  },
}

const chart = document.getElementById('chart1')
new Chart(chart, options);
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2.2.0/dist/chartjs-plugin-datalabels.min.js"></script>

<div style="width:500px;height:184px">
   <canvas id="chart1" width="500" height="184"></canvas>
<div>

Code that should work:
(base of the documentation)

{
    type: 'doughnut',
    data:{
        labels: [
          'Carbs',
          'Protien',
          'Fats'
        ],
        datasets: [{
          data: [70, 30, 50],
          backgroundColor: [
            'rgb(255, 99, 132)',
            'rgb(54, 162, 235)',
            'rgb(255, 205, 86)'
          ],
        }]
      },
    options: {
      maintainAspectRatio: false,
      legend: { display: false },
      datalabels: ["70 cal", "30 cal", "50 cal"]
    },
  }
Screenshot online viewer]

Javascript相关问答推荐

如何使用Echart 5.5.0创建箱形图

使用TMS Web Core中的HTML模板中的参数调用过程

node TS:JWT令牌签名以验证客户端和后台问题之间的身份验证

useNavigation更改URL,但不呈现或显示组件

如何解决chrome—extension代码中的错误,它会实时覆盖google—meet的面部图像?'

如何找出摆线表面上y与x相交的地方?

为什么ngModel不能在最后一个版本的Angular 17上工作?'

函数返回与输入对象具有相同键的对象

并不是所有的iframe都被更换

JS—删除对象数组中对象的子对象

保持物品顺序的可变大小物品分配到平衡组的算法

确保函数签名中的类型安全:匹配值

搜索功能不是在分页的每一页上进行搜索

自定义确认组件未在vue.js的v菜单内打开

使用Reaction窗体挂钩注册日历组件

调用特定数组索引时,为什么类型脚本不判断未定义

如何在css中裁剪成一定Angular 的圆的一部分,而不需要复杂的多边形

我想为我的Reaction项目在画布上加载图像/视频,图像正在工作,但视频没有

错误400:当我试图在React中使用put方法时,该字段是必需的

使用重新 Select 和对象理解 Select 器备忘