当前位置: 首页 > 知识库问答 >
问题:

如果标签错误,ChartJS不会呈现任何图例

公羊光明
2023-03-14

我正在使用ChartJS2.4,我想在数据集中预先定义很多设置。但使用空数据数组和未定义的标签。现在我想阻止ChartJS呈现图例,该图例随后显示为“null”或“undefined”。稍后,我将设置一个适当的标签,并开始将数据推送到数据集,最后在图表上调用update(),这很好。

下面是对该代码的基本修改:

var data = {
    labels: ["January", "February", "March", "April", "May", "June", "July"],
    datasets: [
        {
            fill: false,
            lineTension: 0.1,
            backgroundColor: "rgba(75,192,192,0.4)",
            borderColor: "rgba(75,192,192,1)",
            borderCapStyle: 'butt',
            borderDash: [],
            borderDashOffset: 0.0,
            borderJoinStyle: 'miter',
            pointBorderColor: "rgba(75,192,192,1)",
            pointBackgroundColor: "#fff",
            pointBorderWidth: 1,
            pointHoverRadius: 5,
            pointHoverBackgroundColor: "rgba(75,192,192,1)",
            pointHoverBorderColor: "rgba(220,220,220,1)",
            pointHoverBorderWidth: 2,
            pointRadius: 5,
            pointHitRadius: 10,
            data: [],
        }
    ]
};

var myLineChart = new Chart("myChart", {
  type: "line",
    data: data
});


setTimeout(function(){
  data.datasets[0].label = "The Label"
  data.datasets[0].data.push(10, 20)
    myLineChart.update()
}, 2000)

我试图覆盖GenerateLabels,但我没有运气。而设定dateaset.hidden只有在真实但并非真正“隐藏”的情况下才会突破传奇。

编辑1:另一方面,将options.legend.display设置为false将隐藏所有图例,这也不是我需要的。


共有2个答案

曹鹏海
2023-03-14

如果需要,可以删除数据集,这样图例就不会显示:

var autoDisplayLegendPlugin = {

beforeUpdate: function(chartInstance) {

if (chartInstance.canvas.id == 'chart6') {
  // The first (and, assuming, only) dataset.
  var dataset = chartInstance.data.datasets[2];
  if (dataset.data.length != 0){ // delete only if there is no data in dataset
    console.log(chartInstance);
    chartInstance.options.legend.display = true;

  }
  else{
    chartInstance.options.legend.display = true;
    chartInstance.data.datasets.pop(); // if is the last datasets you don't want the legend to appear
  }
}
}};
苏胤
2023-03-14

让我们创建一个插件,在每次更新开始时,根据第一个数据集的标签是否被定义来决定是否显示图例。autoDisplayLegend图表选项启用插件,如果设置为true

一把工作小提琴在这里。代码也可在下面获得。

var autoDisplayLegendPlugin = {
  // Called at start of update.
  beforeUpdate: function(chartInstance) {
    if (chartInstance.options.autoDisplayLegend) {
      // The first (and, assuming, only) dataset.
      var dataset = chartInstance.data.datasets[0];
      if (dataset.label)
        chartInstance.options.legend.display = true;
      else
        chartInstance.options.legend.display = false;
    }
  }
};

Chart.pluginService.register(autoDisplayLegendPlugin);

var data = {
  labels: ["January", "February", "March", "April", "May", "June", "July"],
  datasets: [{
    fill: false,
    lineTension: 0.1,
    backgroundColor: "rgba(75,192,192,0.4)",
    borderColor: "rgba(75,192,192,1)",
    borderCapStyle: 'butt',
    borderDash: [],
    borderDashOffset: 0.0,
    borderJoinStyle: 'miter',
    pointBorderColor: "rgba(75,192,192,1)",
    pointBackgroundColor: "#fff",
    pointBorderWidth: 1,
    pointHoverRadius: 5,
    pointHoverBackgroundColor: "rgba(75,192,192,1)",
    pointHoverBorderColor: "rgba(220,220,220,1)",
    pointHoverBorderWidth: 2,
    pointRadius: 5,
    pointHitRadius: 10,
    data: [],
  }]
};

var myLineChart = new Chart("myChart", {
  type: "line",
  data: data,
  options: {
    // Option to auto display the legend.
    autoDisplayLegend: true
  }
});


setTimeout(function() {
  data.datasets[0].label = "The Label"
  data.datasets[0].data.push(10, 20)
  myLineChart.update()
}, 2000)
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.bundle.js"></script>
<canvas id="myChart" width="400" height="250"></canvas>
 类似资料:
  • 尝试让字符串标签呈现在我的条形图的 x 轴上。只是没有出现。下面是代码片段。一切都很好,除了标签没有显示。我已经尝试设置以下内容,但仍然一无所获。 ...

  • 问题内容: 我正在开始一个JSF项目(这是我第一次使用JSF),并且在呈现标签方面遇到问题。我正在Eclipse中进行开发,并将TomCat用作服务器。 我的login.jsp文件:https : //gist.github.com/code-curve/e7e557262d407dddd1f3 我的web.xml文件:https : //gist.github.com/code-curve/52

  • 我正在尝试使用Javascript on-click函数显示和隐藏内容。我有一个相当长的表,所以我使用了class display:“none”作为它的一部分。然后我添加了一个按钮,点击该按钮将显示表的其余部分。比如隐藏/显示切换。它不会呈现。这是什么问题?控制台没有给我任何错误。谢谢, null null

  • 我正在尝试做简单的spring MVC库 你知道为什么我在View上有问题吗?当我在控制器中使用homepage方法时,它应该显示给我index.html,但我一直只得到白标签错误页面,而且我不知道为什么:/ 我的结构:[https://i.imgur.com/5trggrb.png] 我的控制器: null 我的POM: index.html application.properties

  • 问题内容: // json就是这样 // HTML //输出 但是如何渲染该标签并使用angular显示它呢? //输出应该像这样 问题答案: 与其传递字符串以直接查看,不如使用sce.trustAsHtml预处理html。 然后在视图模板中,使用ng-bind-html处理html绑定。 正如您提到的那样,您有一个对象数组,将它们投射到控制器中并不是那么容易,您可以在视图中绑定到您的then调用

  • 但这并不好。我希望标签每秒钟都可见。我想看看有多少标签。然后,如果超过X,只选择一些,但可能有一些更容易。 以下是标签中的代码: 有什么想法吗?