javascript 带时间水平条形图:工具提示仅适用于最后一个项目

ql3eal8s  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(86)

我目前正在尝试使用chart-js和momentum重新创建一个机器时间轴。当前状态看起来已经与原始状态相似,但有一些点没有按预期工作。

  • 工具提示只显示在最后一个栏上(在右边)
  • 图例显示了3种状态,但每种状态仅显示一次

工作示例https://codepen.io/tulipuser/pen/PoXmRQR
预期结果:

如图所示,每个状态都应该可见一次。每个工具提示都应该有效,而不仅仅是最后一个。

var ctx = document.getElementById("myChart");
var myChart =   new Chart(ctx, {
            type: 'bar',
            data: {
              labels: ['Status'],
              datasets: [{label:'RUNNING',borderWidth:1,backgroundColor:'rgba(101,172,91,1)',data:[{x:'2023-09-01T08:56:26.000Z',y:0}]},
              {label:'IDLE',borderWidth:1,backgroundColor:'rgba(233,157,82,1)',data:[{x:'2023-09-01T09:39:12.000Z',y:1}]},
              {label:'RUNNING',borderWidth:1,backgroundColor:'rgba(101,172,91,1)',data:[{x:'2023-09-01T09:42:44.000Z',y:2}]},
              {label:'STOPPED',borderWidth:1,backgroundColor:'rgba(212,29,29,1)',data:[{x:'2023-09-01T10:00:11.000Z',y:3}]},
              {label:'RUNNING',borderWidth:1,backgroundColor:'rgba(101,172,91,1)',data:[{x:'2023-09-01T12:30:00.000Z',y:4}]},
              {label:'IDLE',borderWidth:1,backgroundColor:'rgba(233,157,82,1)',data:[{x:'2023-09-01T12:55:23.000Z',y:5}]},
              {label:'RUNNING',borderWidth:1,backgroundColor:'rgba(101,172,91,1)',data:[{x:'2023-09-01T19:00:12.000Z',y:6}]},
              {label:'IDLE',borderWidth:1,backgroundColor:'rgba(233,157,82,1)',data:[{x:'2023-09-01T21:12:45.000Z',y:7}]},
              {label:'RUNNING',borderWidth:1,backgroundColor:'rgba(101,172,91,1)',data:[{x:'2023-09-02T02:12:12.000Z',y:8}]}],
            },
            options: {
                responsive: true,
                scales: {
                  x: {
                    stacked: false,
                    min: '2023-09-01T08:56:26.000Z',
                    //OP "min: moment().startOf('day').subtract(11, 'day')" worked only on the first day
                    type: 'time',
                        time: {
                            unit: 'minute',
                             displayFormats: {
                                hour: 'H:mm'
                              },
                        }
                  },
                  y: {
                    stacked: true
                  }
                },
            indexAxis: 'y',
            }
        });
.myChartDiv {
  max-width: 600px;
  max-height: 400px;
}
<script src="https://npmcdn.com/chart.js@latest/dist/chart.umd.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.0/chart.min.js" type="module"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chartjs-adapter-moment/1.0.1/chartjs-adapter-moment.min.js"></script>
<div class="myChartDiv">
  <canvas id="myChart" width="600" height="400"></canvas>
</div>
1tu0hz3e

1tu0hz3e1#

interaction.mode: 'dataset'添加到options,如下所示,它将工作。

options: {
  responsive: true,
  interaction: {
    mode: 'dataset'
  },
  ...

有关详细信息,请参阅Chart.js文档中的交互一章。
通过如下所示定义options.plugins.tooltip.mode: 'dataset'可以获得相同的结果(参见Tooltip)。

options: {
  responsive: true,
  plugins: {
    tooltip: {
      mode: 'dataset'
    }
  },
  ...

相关问题