【问题标题】:how to group duplicate labels in order to create a label without duplicates in chart.js如何对重复标签进行分组以便在chart.js中创建没有重复的标签
【发布时间】:2021-09-17 19:35:05
【问题描述】:

我似乎无法解决这个问题: 我的标签给我发回列表, 在我的情况下,我希望只有 HOME40、HOME60 和 PRO 作为标签,但不幸的是它返回了它的串联, 我也想换颜色,如果是HOME40的话颜色一定是绿色的,如果是PRO的话就是红色的。 有人有什么建议吗?

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
<div class="trendmensuel">
    <canvas id="trendmensuel"></canvas>
</div>

<script>
       var trendMensuel = [ 
  { produit: "HOME40Z", mois: "Janvier", effectif: 6, bgColor: "red" },
  { produit: "HOME60", mois: "Janvier", effectif: 7, bgColor: "green" },

  { produit: "HOME40Z", mois: "Février", effectif: 6, bgColor: "red" },
  { produit: "PRO", mois: "Fevrier", effectif: 9, bgColor: "blue" },

  { produit: "HOME60", mois: "Mars", effectif: 3, bgColor: "green" },
];


   var label_trendMensuel = trendMensuel.map(function(e){
    return e.mois;
   });

   var produit_trendMensuel = trendMensuel.map(function(e){
    return e.produit;
   });

   var effectif_trendMensuel = trendMensuel.map(function(e){
    return e.effectif;
   });;

var ctx = document.getElementById("trendmensuel");
var chart = new Chart(ctx, {
   type :"bar",
   data : {
     labels : label_trendMensuel, // ito efa mety
     datasets:[
     {
        type: "bar",
        backgroundColor: "rgba(54, 162, 235, 0.2)",
        borderColor: "rgba(54, 162, 235, 1)",
        borderWidth: 1,
        label: produit_trendMensuel,
        data: effectif_trendMensuel,
     },],
   },

   });

</script>

【问题讨论】:

    标签: javascript html css charts


    【解决方案1】:

    这是你想要的吗?

    var trendMensuel = [
      { produit: "HOME40Z", mois: "Janvier", effectif: 6, bgColor: "red" },
      { produit: "HOME60", mois: "Janvier", effectif: 7, bgColor: "green" },
      { produit: "PRO", mois: "Janvier", effectif: 9, bgColor: "blue" },
      { produit: "HOME40Z", mois: "Février", effectif: 3, bgColor: "red" },
      { produit: "HOME60", mois: "Février", effectif: 4, bgColor: "green" },
      { produit: "PRO", mois: "Février", effectif: 1, bgColor: "blue" },
    ];
    
    const data = trendMensuel.reduce(
      (a, b) => {
        const i = a.months.findIndex(x => x === b.mois);
        const j = a.products.findIndex(y => y.label === b.produit);
    
        if (i === -1) {
          a.months.push(b.mois);
        }
    
        if (j === -1) {
          a.products.push({
            type: "bar",
            backgroundColor: b.bgColor,
            borderColor: "rgba(54, 162, 235, 1)",
            borderWidth: 1,
            label: b.produit,
            data: [b.effectif],
          });
        } else {
          a.products[j].data.push(b.effectif);
        }
    
        return a;
      },
      { months: [], products: [] }
    );
    
    var ctx = document.getElementById("trendmensuel").getContext("2d");
    var chart = new Chart(ctx, {
      type: "bar",
      data: {
        labels: data.months, // ito efa mety
        datasets: data.products,
      },
    });
    <script src="https://cdn.jsdelivr.net/npm/chart.js@3.4.1/dist/chart.min.js"></script>
    <canvas id="trendmensuel" width="400" height="400"></canvas>

    【讨论】:

    • 如果您尝试使用我编辑的这些数据,您将获得另外 3 个标签,但是当更多数据进入时我不希望有更多标签
    • @SarindraTherese,我为您的最新数据更新了我的答案。希望对你有帮助
    • 是的,这就是我想要的,你知道如何堆叠这个图表吗?
    • @SarindraTherese,很高兴听到。用于堆叠图表。你可以看看这个例子。 chartjs.org/docs/latest/samples/bar/stacked.html
    • 嘿,有一个问题,如果缺少数据,图表会移动,无论我尝试了多少,但我无法弄清楚如何修复它,@ikhvs 我会编辑数据
    猜你喜欢
    • 1970-01-01
    • 2019-10-17
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2014-07-10
    • 2016-05-15
    相关资源
    最近更新 更多