Member 13863747 Ответов: 1

D3.js установите начальный уровень масштабирования


У меня есть этот силовой ориентированный график, настроенный для увеличения масштаба контейнера, и он отлично работает. Однако при начальной загрузке уровень масштабирования слишком близок и выглядит не очень хорошо. Есть ли какой-либо способ установить начальный уровень масштабирования дальше, чтобы избежать того, чтобы пользователь сначала уменьшил масштаб. Любая помощь будет очень признательна, спасибо!

Что я уже пробовал:

Вот мой график силы коды


    var svg = d3.select("svg"),
        width = +svg.attr("width"),
        height = +svg.attr("height");
<------------------------------------------HERE-------------------------------------->
    var zoom = d3.zoom().on("zoom", zoom_actions);

    vis = svg.append("svg:svg")
     .attr("width", width)
     .attr("height", height)
     .call(zoom) // here
     .call(zoom.transform, d3.zoomIdentity.translate(100, 50).scale(0.5))
      g.append("svg:g")
     .attr("transform","translate(100,50) scale(.5,.5)");


    zoom(svg);
<------------------------------------------HERE-------------------------------------->

    var simulation = d3.forceSimulation()
        .force("link", d3.forceLink().distance(300).id(function(d) {
            return d.id;
        }))
        .force("charge", d3.forceManyBody().strength(-300))
        .force("center", d3.forceCenter(width / 2, height / 2));

    var g = svg.append("g")
        .attr("class", "everything");

    var link = g.append("g")
        .attr("class", "links")
        .selectAll("line")
        .data(graph.links)
        .enter().append("line")
        .style("stroke", linkColour)
        .attr("stroke-width", function(d) {
            return Math.sqrt(d.value);
        });

    var node = g.append("g")
        .attr("class", "nodes")
        .selectAll("g")
        .data(graph.nodes)
        .enter().append("g")

    var circles = node.append("circle")
        .attr("r", 20)
        .attr("fill", circleColour)
        .call(d3.drag()
            .on("start", dragstarted)
            .on("drag", dragged)
            .on("end", dragended));

    var lables = node.append("text") // Labeling for nodes
        .text(function(d) {
            return d.id;
        })
        .attr('x', 25)
        .attr('y', 6);

    node.append("title")
        .text(function(d) {
            return d.id;
        });

    simulation
        .nodes(graph.nodes)
        .on("tick", ticked);

    simulation.force("link")
        .links(graph.links);

    function circleColour(d) {
        if (d.group == "1") {
            return "SteelBlue";
        } else if (d.group == "2") {
            return "Lime";
        } else {
            return "HotPink";
        }
    }

    function linkColour(d){
        if(d.type == "A"){
            return "DimGrey";
        } else {
            return "SpringGreen";
        }
    }

    function ticked() {
        link
            .attr("x1", function(d) {
                return d.source.x;
            })
            .attr("y1", function(d) {
                return d.source.y;
            })
            .attr("x2", function(d) {
                return d.target.x;
            })
            .attr("y2", function(d) {
                return d.target.y;
            });
        node
            .attr("transform", function(d) {
                return "translate(" + d.x + "," + d.y + ")";
            })
    };

    function zoom_actions() {
        g.attr("transform", d3.event.transform)
    }

    function dragstarted(d) {
        if (!d3.event.active) simulation.alphaTarget(0.3).restart();
        d.fx = d.x;
        d.fy = d.y;
    }

    function dragged(d) {
        d.fx = d3.event.x;
        d.fy = d3.event.y;
    }

    function dragended(d) {
        if (!d3.event.active) simulation.alphaTarget(0);
        d.fx = null;
        d.fy = null;
    }
}

1 Ответов

Рейтинг:
0

User 7429338

Пробовали ли вы принятое решение по тому же вопросу на stackoverflow?

javascript - D3.js установить начальный уровень масштабирования - переполнение стека[^]


Member 13863747

Я пытался реализовать его на своих текущих кодах, но я не уверен, что это не работает для меня или я реализую его неправильно.

[no name]

Можете ли вы показать, что вы пробовали? Я не вижу предложенного преобразования и масштабирования нигде в коде, который вы опубликовали.

Member 13863747

Я обновил коды.

[no name]

Попробуй:

var zoom = d3.behavior.zoom().translate([100,50]).scale(.5);

vis = svg.append("svg:svg")
     .attr("width", width)
     .attr("height", height)
     .call(zoom.on("zoom",zooming))
           .append("svg:g")
           .attr("transform","translate(100,50)scale(.5,.5)");

Member 13863747

Все равно не повезло вот мой JSFiddle http://jsfiddle.net/3eLtow6d/6/ пожалуйста, взгляните