В этом простом примере: http://jsfiddle.net/2VeGY/1/D3 шкала терпит неудачу, если первое значение отличается от нуля
<!doctype html>
<meta charset="utf-8">
<title>single column</title>
<style>
*{margin:0,padding:0}
input{width:800px;}
nav{border:1px solid gray; width:850px;}
li{display:inline-block; height:30px; }
li:hover{opacity:0.8}
</style>
<script src="http://d3js.org/d3.v3.min.js"></script>
<body>
<input value="[{"v":0,"c":"red"},{"v":100,"c":"#005"},{"v":200,"c":"#12d"}, {"v&quo\
t;:300,"c":"#1dd"}, {"v":400,"c":"red"} ]">
<nav>
<ul>
</ul>
</nav>
<script>
var wscale = d3.scale.linear().range(["0px","800px"])
update()
d3.select("input").on("change",update)
function update(){
var data = JSON.parse(d3.select("input").property("value"));
var li=d3.select("ul").selectAll("li").data(data);
wscale.domain(d3.extent(data,function(d){return d.v}))
li.enter().append("li")
li
.style("width",function(d,i){
start=d.v
i+1 == data.length ? end=d.v : end=data[i+1].v;
return wscale(end-start)
})
.style("background-image",function(d,i){
start=d.c;
i+1 == data.length ? end=d.c : end=data[i+1].c;
return "linear-gradient(to right, "+start+","+end+")"});
li.exit().remove()
}
</script>
вы можете изменить цветовую гамму шагов data[...].c
и их положение data[...].v
. Шкала обновляется динамически.
Моя проблема в следующем: почему это беспорядок, если первое значение отличается от нуля?
Большое спасибо за помощь!
Я не уверен, что вы просите. Какое первое значение? Как не работает масштаб? –
Посмотрите в поле ввода: http://jsfiddle.net/2VeGY/1/, если вы измените последнее значение 'v: 400' в, например,' v: 1000', градиенты будут автоматически обновлены, но если вы измените значение ** first ** 'v: 0' на что-то другое, ширина не рассчитана правильно –