当前位置: 首页 > 知识库问答 >
问题:

图表。JS垂直线与力矩。JS水平轴

闾丘德业
2023-03-14

有没有办法使用Chart.JS2.0创建垂直线(事件线、相位变化)?

我在网上看到了一些例子(请参阅相关问题),但在使用Moment时。js创建水平轴时,不可能给LineAtIndex一个时间。js date在该日期创建一行。

    var originalLineDraw = Chart.controllers.line.prototype.draw;
Chart.helpers.extend(Chart.controllers.line.prototype, {
  draw: function() {
    originalLineDraw.apply(this, arguments);

    var chart = this.chart;
    var ctx = chart.chart.ctx;

    var index = chart.config.data.lineAtIndex;
    if (index) {
      var xaxis = chart.scales['x-axis-0'];
      var yaxis = chart.scales['y-axis-0'];

      ctx.save();
      ctx.beginPath();
      ctx.moveTo(xaxis.getPixelForValue(undefined, index), yaxis.top);
      ctx.strokeStyle = '#ff0000';
      ctx.lineTo(xaxis.getPixelForValue(undefined, index), yaxis.bottom);
      ctx.stroke();
      ctx.restore();
    }
  }
});

这里有一把小提琴展示了这个问题:https://jsfiddle.net/harblz/0am8vehg/

我认为我的问题是我没有正确理解这段代码:< br >

var=chart.scales['x-axis-0'];
var yaxis=chart.scales['y-axis-0'];

如果我能够解决这个问题,我会在这里为任何未来处理相同项目的用户发布一个工作小提琴。

感谢您抽出宝贵时间阅读本:)

共有1个答案

商瀚
2023-03-14

我尝试了多个插件,但没有一个能够处理时间类型的笛卡尔坐标图。我的解决方案相当简单:

首先全局注册图表插件:

Chart.plugins.register({
  drawLine: function (chart, xValue, color = 'rgba(87,86,86,0.2)') {
    const canvas = chart.chart
    const context = canvas.ctx

    context.beginPath()
    context.moveTo(xValue, 6) // top
    context.lineTo(xValue, canvas.height - 73) // bottom
    context.strokeStyle = color
    context.stroke()
  },

  afterDraw: function (chart) {
    const xScale = chart.scales['x-axis-0']

    if (chart.options.verticalLine) {
      chart.options.verticalLine.forEach((line) => {
        const xValue = xScale.getPixelForValue(line)

        if (xValue) {
          this.drawLine(chart, xValue)
        }
      })
    }
  }
})

然后将verticalLine数组添加到图表定义中:

options: {
   scales: { xAxes: [{ type: 'time' }] },
   verticalLine: ['2019-04-1', '2019-07-01', '2019-10-01'],
 }
 类似资料:
  • 我正在使用MPAndroidChart库。在条形图中,默认情况下,所有条形图都是垂直的(自下而上),如何水平显示?

  • 我正在尝试使用2.3.0绘制chart.js水平条形图- 但它只显示一个小节。我错过了什么?

  • 我有一个由我的WordPress主题提供的社交类如下,它垂直放置: 我正在尝试将此列表放置在一条水平线上 但我被困住了。有人有主意吗?

  • 问题内容: 我的图像是在螺旋笔记本纸上书写的文字。纸有水平线。我想从图像中删除水平线。 在进行谷歌搜索时,我发现了一个我认为可行的解决方案:通过使用形态学运算提取水平线和垂直线该解决方案是C ++的,因此我将其转换为Python。它在该解决方案中提供的示例图像上效果很好,但是,它似乎不适用于我的图像。 在我的图像上运行它时,我得到以下结果: 原始图片 产生的图像 以下是我从C ++转换的Pytho

  • 我是一名iText java开发人员。我一直在处理大型表,现在我陷入了垂直拆分表的困境。 在iText In Action的第119页,尊敬的布鲁诺·洛瓦吉(我非常尊重这个家伙)解释了如何拆分一个大表,使列出现在两个不同的页面中。 我遵循了他的示例,当文档只有几行时,它工作得很好。 在我的例子中,我有100行,要求文档需要在几页中拆分100行,同时垂直拆分列。我按如下方式运行我的代码,但只显示前3

  • 我在水平滚动视图中实现了一个表格布局,这也是垂直滚动视图的一部分。它是这样工作的;当垂直或水平滚动时,它会为每种滚动类型显式滚动。意思是当垂直滚动时,水平滚动根本不会发生,比如说,如果手指对角移动,就不会发生垂直或水平滚动。要水平滚动,必须再次触摸它,并且它只在水平方向滚动,如果手指对角移动,就不会发生垂直或水平滚动。[这里也是如此]。 一次手指触摸似乎只处理一次回调。我也需要对角线滚动,应该同时