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

ChartJS显示图例

宋铭
2023-03-14

我是ChartJS的新手,我对这个传说有一些问题。我有一个简单的条形图,只有3条像:

<div class="x_panel">
    <div class="x_title">
        <h2>Bar graph</h2>
        <ul class="nav navbar-right panel_toolbox" style="padding-left:5%">
            <li>
                <a class="collapse-link"><i class="fa fa-chevron-up"></i></a>
            </li>
            <li>
                <a class="close-link"><i class="fa fa-close"></i></a>
            </li>
        </ul>
        <div class="clearfix"></div>
    </div>
    <div class="x_content">
        <canvas id="mybarChart"></canvas>
    </div>
</div>

 var mybarChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: [],
            datasets: [{
                label: '# of Votes',
                backgroundColor: "#000080",
                data: [80]
            }, {
                label: '# of Votes2',
                backgroundColor: "#d3d3d3",
                data: [90]
            },
            {
                label: '# of Votes3',
                backgroundColor: "#add8e6",
                data: [45]
            }]
        },

        options: {
            legend: {
                display: true,
                labels: {
                    fontColor: "#000080",
                }
            },
            scales: {
                yAxes: [{
                    ticks: {
                        beginAtZero: true
                    }
                }]
            }
        }
    });

但我显示的图表是空的:(我还尝试通过在画布下方添加另一个div来显示图例,并通过以下方式调用它:

document.getElementById('barlegend').innerHTML = mybarChart.generateLegend();

同样的结果是:(

我做错了什么?

共有2个答案

赫连捷
2023-03-14

使用最新版本的chart.js(3.6.0),您可以使用以下代码控制图例显示:

  const options = {
    plugins: {
    ...
      legend: {
        position: "right", // by default it's top
      },
    ...
    },
  };

我知道这已经存在很长时间了,但可能会帮助那些在未来与我面临同样问题的人。

江宏伟
2023-03-14

根据您在问题中提供的代码,您似乎忘记在图表数据对象中添加标签数据。如果没有这些信息,chartjs将无法生成轴并将每个数据集数据映射到该轴。

此外,由于您提到您希望图例位于图表下方,我添加了show:底部选项。这是工作代码。

var ctx = document.getElementById("mybarChart").getContext("2d");

var mybarChart = new Chart(ctx, {
  type: 'bar',
  data: {
    labels: ['Votes'],
    datasets: [{
      label: '# of Votes',
      backgroundColor: "#000080",
      data: [80]
    }, {
      label: '# of Votes2',
      backgroundColor: "#d3d3d3",
      data: [90]
    }, {
      label: '# of Votes3',
      backgroundColor: "#add8e6",
      data: [45]
    }]
  },

  options: {
    legend: {
      display: true,
      position: 'bottom',
      labels: {
        fontColor: "#000080",
      }
    },
    scales: {
      yAxes: [{
        ticks: {
          beginAtZero: true
        }
      }]
    }
  }
});

这里还有一个代码笔示例。

 类似资料:
  • 我是ChartJS的新手,我有一个水平条形图: HTML JavaScript: 我试着加上 但结果还是一样。我做错了什么?我在这里发现了一些东西,但是每个条上显示的标签是Y轴的刻度。是否可以在每个栏上添加图例并保留工具提示? 提前感谢!

  • 我试图创建一个堆叠条形图与chartjs。我有时间差异的时间序列,这意味着一些序列可以在一段时间内有价值,但其他序列没有价值。出于这个原因,我选择直接将x值包含在数据集中,而不是作为标签数组,但是图表不能正确渲染。 这是我的代码: 我认为问题在于x轴堆叠。 这里有一个JSFiddle来说明这个问题。 https://jsfiddle.net/1kLyyjfp/

  • 我有一个使用chart.js创建的条形图。页面加载时一切正常,但当我使用daterangepicker更改时间范围时,出现了一个小故障。新数据被引入,但当我将鼠标悬停在上面时,旧数据会显示出来。我是javascript新手,希望能得到一些帮助。看起来我需要合并。销毁();不知怎么的,但我不知道怎么做。下面是我的代码片段: 破坏原始数据的最佳方法是什么,以便当我更改日期范围并将鼠标悬停在新图表上时,

  • 问题内容: 我正在尝试使用Chart JS 创建一个表,该表具有来自JSON文件的动态生成的数据点。我的代码的逻辑如下所示: 同时,我的JSON文件如下所示: 该变量包含ChartJS的配置设置,包括设置数据点。当加载到ChartJS中时,提供显示我的图表所需的信息。 无论如何,我的想法是使用变量作为使用for循环附加数据集的一种方式。不幸的是,该代码未产生任何结果。我知道我添加变量的方法有问题,

  • 使用chart.js的示例折线图代码(http://www.chartjs.org/docs/#line-图表示例用法),我能够在js fiddle或独立页面上创建一个完美的折线图。 问题是,当将完全相同的配置代码插入到我的项目中并转换为自定义敲除绑定时,不会显示应位于图表左边缘和下边缘的数据标签。除此之外,它看起来和样品完全一样,就像它应该的那样。 我的代码太复杂,无法包含在这里,所以我要寻找的

  • 我认为我的问题是一个已知的问题,每次我制作一个新的图表,并将鼠标悬停在画布上的一些点上,旧的图表总是会闪进闪出。这是我试图修复它的一个线程,但似乎没有任何效果。我试图重新添加画布,使用破坏,清除,如果语句应该清除它,但什么都没有。 这是我的代码: 我尝试添加