ChartJS:仅禁用Y轴的动画

ma8fv8wu  于 2022-11-07  发布在  Chart.js
关注(0)|答案(1)|浏览(172)

我现在有一个显示实时信息的图表。我试着禁用y轴的动画,因为点在y轴上跳来跳去,这会产生一种奇怪的效果。但我仍然希望新的点在x轴上平滑地淡入。
我尝试了以下配置:

const chartOptions: ChartOptions = {
    animations: {
        x: {
          duration: 500
        },
        y: false,
    },
    // ...
};

结果是完全没有动画。y轴上没有,x轴上也没有。看起来不再平滑。
在25个数据点之后,我将shift()/push(newDataPoint)放在一个单独的数组中,然后替换图表的整个data数组,因为我使用了带有vue-chartjs库的ChartJS。

我需要完全相同的行为,就像在上面的GIF,除了它不应该口吃,但滚动沿着x轴平滑。

全视图图表示例供参考

<script setup lang="ts">
const chartData = ref<ChartData<'line'>>({
  labels: [],
  datasets: []
})

const chartLabels: string[] = Array(maxDataPoints).fill('');
const chartDataPoints: number[] = Array(maxDataPoints).fill(18.3);

function fillData() {
  if (chartDataPoints.length > maxDataPoints) {
    chartLabels.shift();
    chartDataPoints.shift();
  }

  chartLabels.push(new Date().toLocaleString())
  chartDataPoints.push(Number((currentDistance.value * 0.1).toFixed(1)))

  const updatedChartData: ChartData<'line'> = {
    labels: [...chartLabels],
    datasets: [
      {
        label: 'Distance',
        tension: 0.5,
        data: [...chartDataPoints],
      }
    ]
  }

  chartData.value = { ...updatedChartData }
}

onMounted(() => {
  fillData();

  setInterval(() => fillData(), 500)
})

const chartOptions: ChartOptions = {
  responsive: true,
  maintainAspectRatio: false,
  //animation: false,
  animations: {
    x: {
      duration: 500
    },
    y: false,
  },
  scales:{
    x: {
      display: false,
    },
    y: {
      suggestedMin: 0,
      suggestedMax: 20,
    }
  },
  plugins: {
    legend: {
      display: false
    },
  },
}
</script>

<template>
  <LineChart :chartData="chartData" :chartOptions="chartOptions" />
</template>
dxpyg8gm

dxpyg8gm1#

最后,我使用了nagix的chartjs-streaming-plugin,它做的正是我想要的。

相关问题