Я хочу увеличить мои узлы следующим образом, показанным этой скрипкой. http://jsfiddle.net/HF57g/2/D3 - Масштабирование с символами SVG D3
Fiddle Источник: How to zoom in/out d3.time.scale without scaling other shapes bound to timeline
С помощью скрипки, я был в состоянии применить масштабирование с SVG кругами.
Примечание. В приведенном ниже коде показано, что с помощью SVG Circles вы получаете атрибут оси x и y.
.enter().append("circle")
.attr("cx", function(d) { return xScale(d); })
.attr("cy", function(d) { return yScale(d); })
То, что я хочу, чтобы иметь круги и алмазы, как с помощью этой функции масштабирования
Так что я выбрал «d3.svg.symbol» D3, в, чтобы оба круга и алмазы.
Однако проблема, с которой я сталкиваюсь, заключается в том, что с использованием символов SVG от D3 у меня нет доступа к управлению осью х именно потому, что она позволяет только переводить.
.enter().append("path")
.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")"; })
.attr("d", d3.svg.symbol()
.size(145)
.type(function(d) {
if(d.value <= 10)
return "diamond";
else
return "circle";
}));
Код, приведенный ниже, показывает манипуляцию осью x для увеличения, взятого из скрипки. Я хочу сделать то же самое с переводом, если это возможно.
return svg.selectAll("rect.item")
.attr("x", function(d){return scale(d);})
Приведенный ниже код показывает, как он работает с SVG кругов, и это показывает наиболее логичным, как я думал, чтобы сделать работу трансфокатора. Но, к сожалению, это не сработает.
var zoom = d3.behavior.zoom()
.on("zoom", function(){
//If I use SVG Circles the following code works.
//chart.selectAll(".item").attr("cx", function(d){ return xScale(d); });
//By using SVG Symbols and translate, this does not work
chart.selectAll(".item").attr("transform", function(d) { return "translate("+ d.x +", 0)";});
}).x(xScale);
Вот скрипка с бриллиантами и кругами. https://jsfiddle.net/g67cgt4w/
Можете ли вы реализовать то, что вы пробовали на скрипке? – thatOneGuy
В вашей скрипке у вас есть раздел с комментариями, который включает следующее как часть изменения атрибута 'transform':' scale ("+ d3.event.scale +", 1) '. Вместо «1» (т. Е. Без изменения оси y) меняется ли оно на «scale» («+ d3.event.scale +», «+ d3.event.scale +») 'не дает того, что вы пытаетесь выполнить? (Возможно, я не понимаю вопроса, хотя ... в конце концов, я вижу квадраты вместо бриллиантов). –
@thatOneGuy Здесь вы идете. https://jsfiddle.net/g67cgt4w/ – helloGoodDay