D3.js 勾号格式产生重叠标签
我目前正在使用:D3.js 勾号格式产生重叠标签,d3.js,D3.js,我目前正在使用: var formatValue = d3.format("s"); 然后 var axisX = d3.svg.axis() .scale( someXscale ) .tickFormat (function( d ) { return formatValue(d); } ); 当我缩放(从最高缩放到最低缩放)时,此代码生成以下内容: 该轴上的值可高达3100000000 我不喜欢这样一个事实,即这些值彼此重叠,不那么重要,我希望标签上有千兆、兆、千
var formatValue = d3.format("s");
然后
var axisX = d3.svg.axis()
.scale( someXscale )
.tickFormat (function( d ) { return formatValue(d); } );
当我缩放(从最高缩放到最低缩放)时,此代码生成以下内容:
该轴上的值可高达3100000000
我不喜欢这样一个事实,即这些值彼此重叠,不那么重要,我希望标签上有千兆、兆、千
如果有任何建议,我将不胜感激。博斯托克先生可以提出一个好办法:
var formatAbbreviation = d3.format(".2s");
formatAbbreviation(5000000000); // 5.00G
formatAbbreviation(5000000); // 5.00M
formatAbbreviation(5000); // 5.00k
在帖子中,你可以看到他实际定制了行为,将G
更改为B
实际上,我在过去创建了自己的自定义实现,也许它会有用。
我举了一个例子:
var format = function(num) {
var numToStr = num + '';
var ext = ['', 'K', 'M', 'G']; // Add extensions as needed
var size = 3;
var val = 0;
var max = 5; // how many digit maximum we want on screen
var compress = function(str) {
var len = str.length;
if (len <= size) {
return str + ext[val];
}
if (val + 1 === ext.length) {
return str.slice(0, max) + ext[val]; // <= what to do when the max number of digits is reached, change as needed
}
val++;
return compress(str.slice(0, str.length - size));
}
return compress(numToStr);
}
console.log(format(1)) // => 1
console.log(format(12)) // => 12
console.log(format(123)) // => 123
console.log(format(1234)) // => 1K
console.log(format(12345)) // => 12K
console.log(format(123456)) // => 123K
console.log(format(1234567)) // => 1M
console.log(format(12345678)) // => 12M
console.log(format(123456789)) // => 123M
console.log(format(1234567890)) // => 1G
console.log(format(12345678901)) // => 12G
console.log(format(12345678902321312)) // => 12345G
// used more or less like so in d3
var axisX = d3.svg.axis()
.scale( someXscale )
.tickFormat (function( d ) { return format(d); } );
var格式=函数(num){
var numtost=num+'';
var ext=['''K','M','G'];//根据需要添加扩展
变量大小=3;
var=0;
var max=5;//屏幕上最多需要多少位数
变量压缩=函数(str){
var len=str.length;
如果(第12节)
console.log(格式(123))/=>123
console.log(格式(1234))/=>1K
console.log(格式(12345))/=>12K
console.log(格式(123456))/=>123K
console.log(格式(1234567))/=>1M
console.log(格式(12345678))/=>12M
console.log(格式(123456789))/=>123M
console.log(格式(1234567890))/=>1G
console.log(格式(12345678901))/=>12G
console.log(格式(12345678902321312))/=>12345G
//在d3中或多或少地这样使用
var axix=d3.svg.axis()
.scale(someXscale)
.tickFormat(函数(d){返回格式(d);});
正如您所注意到的,我们可以定义您希望在屏幕上显示的最大位数—在本例中为5—并按照我们认为最适合特定情况的方式处理该情况(每种情况都不同)。您的建议
format=function(num){
在2次放大操作后,只需用1K
标记所有刻度。格式=d3.format(.2s”);
实际上也一样,但在5-6次放大操作后。我需要格式的准确性,只要在轴上减少刻度,因为它变得过于拥挤。