如何根据每个群集中需要多少空间来保持每个嵌套组的起点以保持恒定的条宽?序数标度为每个簇分配相同的空间,然后减小条宽以容纳更多条,但我想以线性方式调整以保持条形大小。有任何想法吗?
由于
答案 0 :(得分:0)
你是否尝试用'线性'交换'序数'..因为你可以像顺序尺度一样指定多个域和范围值,而d3会像顺序尺度一样使用它们,但保持平滑线性插值..检查它的行为方式。
var scale = d3.scale.linear()。domain([1,2,3,4])。range([1,20,300,4000])
好的,在获得更多洞察力之后,看起来您必须复制原始比例并对其进行更改,以便为具有不同... umm,比例的每个对象创建新比例。有趣的是,直到现在,这个明显的线索从未进入我的脑海。
我将d3示例复制到jsfiddle并稍微修改了一下,似乎有效。这是你想要的效果吗?
我大多只是用这些枪支替换了示例中的无害forEach循环。
data.forEach(function(d,i){/*-=======================*/
var myNames = d3.keys(d).filter(function(key) { ////
if(key !== "State" && d[key]){ /*-==============-*/
allAgeNames[key]
= true;
return true;
} return false;
//==========
xScales[i] = d3.scale.ordinal();/*==========*/
d.ages = myNames.reduce(function(arr, name) {
if(+d[name]) arr.push({
value:+d[name],
x:xScales[i],
name: name
});/*===*/
return arr;
},[]);/*
//||||||||||||||||||||||||||==========================----*/
xScales[i].domain(myNames).rangeRoundBands([0, x.rangeBand()], 0);
d.x = /*|_|_|_|_|_*/
xScales[i];
d.ages.x =
xScales[i]
});
我开玩笑,堆栈溢出不会让我链接到没有一些参考代码的jsfiddle ....所以笑出来。