首页 > 解决方案 > 如何在 Node.js 中使用 cli-chart 添加条形级别标签?

问题描述

我正在 Node.js 中构建一个命令行图表。这是代码:

var Chart = require('cli-chart');
var chart = new Chart({
    xlabel: 'X axis label',
    ylabel: 'Y axis label',
    direction: 'x',
    width: 20,
    height: 10,
    lmargin: 15,
    step: 2
});

chart.addBar(3, 'red');
chart.addBar(5, 'blue');
chart.addBar(7, 'yellow');
chart.addBar(10, 'green');
chart.draw();

现在我上面定义的标签是用于 y 轴和 x 轴的。但是,我想为每个条定义一个标签,可能在条的顶部或旁边。cli-chart可以做到这一点,如果没有,我该怎么做?

标签: node.js

解决方案


它似乎没有在cli-chart库中添加条形标签的内置选项,但是您可以使用charm.write()方法以一种 hacky 的方式进行操作,修改cli-chart drawBars原型。

var Chart = require('cli-chart');

Chart.prototype.drawBars = function() {  // overrinding the cli-chart drawBars prototype
  // set scale based on max_size
  if (this.direction === 'x') {
    this.scale = this.width/this.max_size;
  } else {
    this.scale = this.height/this.max_size;
  }

  var charm = this.charm;
  for (var i = 0; i < this.bars.length; i++) {
    if (this.direction === 'x') {
      charm.up(3).write(chart.barLabels[i]).pop();  // added line to write bar label
      if (i != 0) charm.up(this.step);
      else charm.up(1).write(chart.barLabels[i]).pop();  // added line to write first bar label
    } else {
      if (i != 0) charm.right(this.step);
    }
    charm.push();
    this.bars[i].draw(this.scale);
    charm.pop();
  }
  if (this.direction === 'x') charm.down(this.step*this.bars.length+1);
  charm.write('\n\n\n');
  if (this.direction === 'y') charm.write('\n');
};


var chart = new Chart({
    xlabel: 'X axis label',
    ylabel: 'Y axis label',
    direction: 'x',
    width: 20,
    height: 10,
    lmargin: 15,
    step: 2
});

chart.barLabels = [  // add bar labels to chart
  'bar label one', 'bar label two', 'bar label three', 'bar label four'
]

chart.addBar(3, 'red');
chart.addBar(5, 'blue');
chart.addBar(7, 'yellow');
chart.addBar(10, 'green');
chart.draw();

Chart但是,直接在库中向构造函数添加一个选项会更干净。

在此处输入图像描述


推荐阅读