chartJS - 点重叠、抖动、噪音?

chartJS - points overplotting, jittering, noise?

嘿,我正在使用 chartJS,我有一个看起来像这样的图表:

如您所见,数据点相互重叠,因此更难阅读。在 RStudio 中有一个解决方案,您只需设置 position="jittering" 它会在点周围添加轻微的噪音。

不幸的是,今天 chart.js 没有这样的能力。但是,这并不意味着您仍然无法获得所需的功能。我想到了几个选项。

1) 实现您自己的 jitter 函数并使用它在传递给 chart.js 之前预处理您的数据。这是一个例子。

var jitter = function(data) {
    return data.map(function(e) {
    var xJitter = Math.random() * (-1 - 1) + 1;
    var yJitter = Math.random() * (-1 - 1) + 1;

    return {
      x: e.x + xJitter,
      y: e.y + yJitter,
    }
  });
};

这里是 codepen example 并排显示原始数据和抖动数据的图表示例。

2) 使用上面的 jitter 函数并将其添加为 chart.js 插件,这样您就可以在任何给定图表中自动 enable/disable 它。这是一个示例(请注意,我们正在使用上面的 jitter 函数。

Chart.plugins.register({
  afterInit: function(chartInstance) {
    if (chartInstance.config.options.jitter) {
      var helpers = Chart.helpers;
      var ctx = chartInstance.chart.ctx;

      chartInstance.data.datasets.forEach(function (dataset) {
        dataset.data = jitter(dataset.data);
      });
    }
  }
});

然后将其添加到您的图表选项配置中。

options: {
  jitter: true,
}

这里是 codepen example 并排显示使用插件的原始数据和抖动数据的图表示例。

显然,您可能希望实现一个更强大的 jitter 函数,该函数接受某种抖动选项,以便它可以智能地应用于任何类型的数据集。如果您决定采用这种方法,我会将其留给您实施。