node.js - 如何在 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可以做到这一点,如果没有,我该怎么做?
解决方案
它似乎没有在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
但是,直接在库中向构造函数添加一个选项会更干净。
推荐阅读
- elasticsearch - 如何将包含某个值的嵌套属性更新为弹性搜索中的另一个值
- video - FFMPEG - bufsize 公式
- if-statement - Vensim 中的 IF THEN 语句
- charts - 将两点注释之间的百分比变化添加到图表,同时保持值点
- flutter - 如何在颤振中重建父小部件?
- typescript - 使用 Cypress 选择不包含文本的 cypress 元素
- c++ - Qt - 尝试在布局中对齐两个 GroupBox
- azure - 消费者在几个小时后停止阅读消息
- python - 如何在python服务器中连接sql3
- sql - 用空值替换表中的所有 0