【问题标题】:ChartJS bar chart with legend which corresponds to each barChartJS 条形图,带有对应于每个条形图的图例
【发布时间】:2019-02-18 22:25:00
【问题描述】:

我正在尝试了解其条形图上的 ChartJS 文档。它对我来说没有意义,因为顶部的标签在某种意义上看起来好像它仅适用于第一个条形(基于颜色),而在另一种意义上,整个图表(它是唯一的标签不在工具提示中,它在前面和中间)

我一直在努力让它更像他们的折线图,它显示了一个带有标签的图例和一个与图表上的每条线相关的彩色方块。 (他们没有多线图的示例,但它确实像这样工作)。

数据对象中的标签属性被转换为栏旁边的值,例如labels: ['36%', '10%', '18%', '34%', '0%', '2%']

我想要一个顶部的图例,表明水色是苹果,灰色是橙色,绿色是梨等,但我最接近的是提供 data.datasets 一个对象数组并制作标签和数组,它只会产生一组条形图,例如示例 here

【问题讨论】:

  • 只需为每种类型创建一个数据集,它们不必有多个条形。
  • @Blindman67 你能告诉我你的意思吗?这听起来与我在将一组标签与一组数据集组合时所尝试的非常相似,但我对此非常陌生,所以也许我没有正确理解。

标签: javascript canvas charts chart.js


【解决方案1】:

这样做的方法是在数据集中创建多个项目,每个项目只有一个类别的数据。您可以拥有一个名为 stock 的顶级标签,然后为每种类型创建单独的数据集。

// create a chart.
const ctx = canvas.getContext("2d");
const chart = new Chart(ctx, {
   type: "horizontalBar",
   data: {
      labels: ["Stock"],
      datasets: [{
         label: "Apples",
         backgroundColor: "#AF7",
         data: [Math.random() * 100],
      },{
         label: "Oranges",
         backgroundColor: "#FA4",
         data: [Math.random() * 100],
      },{
         label: "Mangos",
         backgroundColor: "#FF7",
         data: [Math.random() * 100],
      },{
         label: "Avocados",
         backgroundColor: "#2A7",
         data: [Math.random() * 100],
      }]
   },
   options: {
          responsive: false,
          legend: { position: 'top'},
          title: { display: true, text: 'Fruit in stock'}
      }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script>
<canvas id=canvas height=200 width=500></canvas>

【讨论】:

  • 太好了,谢谢。除了左侧的“Stock”之外,是否有为每个条放置单独的标签,例如18, 82, 22, 80 沿着 y 轴向下?
  • 我确实看过但找不到办法,但这并不意味着它不可能
  • 可以添加到x轴,stacked: true 并添加多个标签
  • @Omran 这对我来说并不适用。有什么想法吗?
  • @momal 我正在这样做{scales: {xAxes: [{stacked: true, ...}]}, ...} 它对我有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
相关资源
最近更新 更多