javascript - Chart.js:显示自定义工具提示,在堆叠条形图上始终可见

标签 javascript asp.net-mvc chart.js

在我的 MVC 项目中,我使用 Chart.js (v2.8.0) 构建一个包含 3 个数据集的堆叠条形图。

我需要为每个数据集显示自定义工具提示,这些提示始终在条形内可见。 (参见下图。)我很难理解如何实现始终可见的自定义工具提示。

Desired End Result

这是我当前的图表 js 代码:

var ctx = document.getElementById('myChart').getContext('2d');
var chart = new Chart(ctx, {
    type: 'bar',
    data: {
        labels: labelArray,
        datasets: [{
            label: 'Green %',
            data: greenData,
            backgroundColor: 'rgb(0,166,149)',
            borderColor: 'rgb(0,166,149)',
            borderWidth: 1,
        },
        {
            label: 'Orange %',
            data: orangeData,
            backgroundColor: 'rgb(229,117,31)',
            borderColor: 'rgb(229,117,31)',
            borderWidth: 1,
        },
        {
            label: 'Grey %',
            data: greyData,
            backgroundColor: 'rgb(179,179,179)',
            borderColor: 'rgb(179,179,179)',
            borderWidth: 1,
        }]
    },
    options: {
        scales: {
            xAxes: [{
                stacked: true,
            }],
            yAxes: [{
                stacked: true
            }]
        }
    }
});

拜托,如果有人可以帮助我在与栏相关的正确位置获得一些始终可见的自定义工具提示,那么我就可以对其进行适当的样式设置。

最佳答案

假设您指的是条形图中的百分比值,这些值称为标签,而不是工具提示(当您将鼠标悬停在元素上时出现的内容)。

标签功能在 Chart.js 中本身不可用,但可以通过 datalabels plugin 添加。您需要通过 script 标记包含该插件。 (在加载 Chart.js 的脚本标记之后!)

bar chart sample已经非常接近您想要的结果,但我已将其与下面代码片段中的代码合并以帮助您。

可以引用插件formatting documentation定制最终结果。

var labelArray = ["James", "Mark", "Simon"],
  greenData = [55, 82, 32],
  orangeData = [27, 10, 53],
  greyData = [18, 8, 15];

var ctx = document.getElementById('myChart').getContext('2d');
var chart = new Chart(ctx, {
  type: 'bar',
  data: {
    labels: labelArray,
    datasets: [{
        label: 'Green %',
        data: greenData,
        backgroundColor: 'rgb(0,166,149)',
        borderColor: 'rgb(0,166,149)',
        borderWidth: 1
      },
      {
        label: 'Orange %',
        data: orangeData,
        backgroundColor: 'rgb(229,117,31)',
        borderColor: 'rgb(229,117,31)',
        borderWidth: 1,
      },
      {
        label: 'Grey %',
        data: greyData,
        backgroundColor: 'rgb(179,179,179)',
        borderColor: 'rgb(179,179,179)',
        borderWidth: 1,
      }
    ]
  },
  options: {
    scales: {
      xAxes: [{
        stacked: true,
      }],
      yAxes: [{
        stacked: true
      }]
    },
    plugins: {
      datalabels: {
        color: 'white',
        font: {
          weight: 'bold'
        },
        formatter: function(value, context) {
          return Math.round(value) + '%';
        }
      }
    }
  }
});
<script src="https://cdn.jsdelivr.net/npm/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="89eae1e8fbfda7e3fac9bba7b1a7b9" rel="noreferrer noopener nofollow">[email protected]</a>/dist/Chart.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="42212a23303628316f322e37252b2c6f262336232e2320272e3102726c756c72" rel="noreferrer noopener nofollow">[email protected]</a>"></script>
<canvas id="myChart"></canvas>

关于javascript - Chart.js:显示自定义工具提示,在堆叠条形图上始终可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58714976/

相关文章:

c# - 如何处理通知警报和服务器进程的用户指定的本地日期时间?

angularjs - 加载 JSON 以显示数据,使用 ng-repeat {ANGULAR.JS}

javascript - Jquery UI 日历控件禁用特定日期

javascript - 隐藏或删除文本节点

c# - AutoMapper 映射函数到成员的获取

asp.net-mvc - 如何在单元测试 FormCollection 中插入值

javascript - 可能使用 JS 从 html iframe 中静音音频源

Javascript 表单验证仅适用于 firefox

javascript - 图表 js 分组条的总和

javascript - Chartjs 2 - 具有相同 y 轴的同一图表上的堆叠条形图和非堆叠线