如何使用Chart.js在yAxis上有条件地显示/隐藏网格线?

问题描述 投票:0回答:1

我第一次使用Chart.js,我使用的是雷达图,我希望yAxis线(从0到100,步长为10)仅显示在偶数上,还将网格线的颜色更改为灰色和较粗,并且万一该值是奇数,根本就不显示网格线,这就是我到目前为止所知道的,我知道我必须使用回调函数来获取我所在的对象瞄准,但我无法获得它的方式:

 buildChart = () => {
    const myChartRef = this.chartRef.current.getContext("2d");

    myLineChart = new Chart(myChartRef, {
      type: "radar",
      data: {
        labels: ["Fifa20", "CS:GO", "Dota 2", "LOL", "Overwatch", "Fortnite"],
        datasets: [
          {
            label: "Games",
            data: [40, 45, 53, 45, 100, 13],
            backgroundColor: [
              "transparent",
              "transparent",
              "transparent",
              "transparent",
              "transparent",
              "transparent"
            ],
            borderColor: [
              "rgba(203,166,255,1)",
              "rgba(203,166,255,1)",
              "rgba(203,166,255,1)",
              "rgba(203,166,255,1)",
              "rgba(203,166,255,1)",
              "rgba(203,166,255,1)"
            ],
            borderWidth: 5,
            pointBorderWidth: 0,
            pointBorderColor: "transparent"
          }
        ]
      },
      options: {
        responsive: true,
        maintainAspectRatio: false,
        scale: {
          ticks: {
            min: 0,
            max: 100,
            fontSize: 7,
            callback: function(value, index, values) {
              switch (value) {
                case 20:
                  return value;
                case 40:
                  return value;
                case 60:
                  return value;
                case 80:
                  return value;
                case 100:
                  return value;
                default:
                  return "";
              }
            }
          },
          angleLines: {
            display: true
          },
          gridLines: {
            display: true,
            color: "#cac7c7",
            callback: function(value, index, values) {
              if (value % 2 === 0) {
               Chart.defaults.global.options.gridLines.display = false;
              }
            }
          },
          pointLabels: {
            fontSize: 16,
            fontStyle: "bold"
          }
        }
      }
    });
  };

  render() {
    console.log(Chart.defaults.global);
    return (
      <div style={{ height: "100%", width: "100%" }}>
        <canvas id="myChart" ref={this.chartRef} />
      </div>
    );
  }
}

javascript reactjs chart.js
1个回答
0
投票

我不明白您为什么要使用回调来实现所需的内容。

为了只显示20、40、60等的网格线,可以定义scale.ticks.stepSize: 20。要使网格线更粗,例如,定义scale.gridLines.lineWidth: 5

new Chart(document.getElementById('myChart'), {
  type: "radar",
  data: {
    labels: ["Fifa20", "CS:GO", "Dota 2", "LOL", "Overwatch", "Fortnite"],
    datasets: [{
      label: "Games",
      data: [40, 45, 53, 45, 100, 13],
      backgroundColor: [
        "transparent",
        "transparent",
        "transparent",
        "transparent",
        "transparent",
        "transparent"
      ],
      borderColor: [
        "rgba(203,166,255,1)",
        "rgba(203,166,255,1)",
        "rgba(203,166,255,1)",
        "rgba(203,166,255,1)",
        "rgba(203,166,255,1)",
        "rgba(203,166,255,1)"
      ],
      borderWidth: 5,
      pointBorderWidth: 0,
      pointBorderColor: "transparent"
    }]
  },
  options: {
    responsive: true,
    maintainAspectRatio: false,
    scale: {
      ticks: {
        display: true,
        min: 0,
        max: 100,
        stepSize: 20,
        fontSize: 7,
        callback: function(value, index, values) {
          switch (value) {
            case 20:
              return value;
              break;
            case 40:
              return value;
              break;
            case 60:
              return value;
              break;
            case 80:
              return value;
              break;
            case 100:
              return value;
              break;
            default:
              return "";
          }
        }
      },
      angleLines: {
        display: true
      },
      gridLines: {
        display: true,
        lineWidth: 5,
        color: "#cac7c7"
      },
      pointLabels: {
        fontSize: 16,
        fontStyle: "bold"
      }
    }
  }
});
canvas {
  min-width: 400px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<canvas id="myChart" width="100" height="100"></canvas>
© www.soinside.com 2019 - 2024. All rights reserved.