Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

D3.js Set initial zoom level

I have several graphs set up to zoom on the container and it works great. However, on the initial load, the zoom level is way too close. Is there a method of setting the initial zoom level to avoid having to first zoom out? I am familiar with the .scale() method but have not had any luck implementing it. Is this the way to go or is there something I am missing?

Here is what I have thus far as pertaining to zoom:

var margin = {top: 20, right: 120, bottom: 20, left: 120},     width = 50000 - margin.right - margin.left,     height = 120000 - margin.top - margin.bottom;  var x = d3.scale.linear()     .domain([0, width])     .range([0, width]);  var y = d3.scale.linear()     .domain([0, height])     .range([height, 0]);  var tree = d3.layout.tree()     .size([height, width])     .separation(function(a, b) { return (a.parent == b.parent ? 1 : 2) / a.depth; });  var diagonal = d3.svg.diagonal()     .projection(function(d) { return [d.x, d.y]; });  function zoom(d) {           svg.attr("transform",       "translate(" + d3.event.translate + ")"+ " scale(" + d3.event.scale + ")"); }  var svg = d3.select("body").append("svg")     .attr("width", width + margin.right + margin.left)     .attr("height", height + margin.top + margin.bottom)   .append("g")     .attr("transform", "translate(" + margin.left + "," + margin.top + ")")     .attr("pointer-events", "all")     .call(d3.behavior.zoom()         .x(x)         .y(y)         .scaleExtent([0,8])         .on("zoom", zoom))         .append('g');  svg.append('rect')     .attr('width', width*5)     .attr('height', height)     .attr('border-radius', '20')     .attr('fill', 'sienna'); 
like image 979
Jakub Svec Avatar asked Apr 23 '13 20:04

Jakub Svec


People also ask

What is initial zoom level?

By default, Chrome sets the zoom level to 100%. To manually adjust the settings, use the Ctrl key and “+” or “-” combos to increase or decrease the page magnification.

Which of these methods help alter zoom modes in d3 JS?

With the help of the d3. zoom function you can alter zoom modes in d3 js.


1 Answers

D3v4 answer

If you are here looking for the same but with D3 v4,

var zoom = d3.zoom().on("zoom", function(){     svg.attr("transform", d3.event.transform); });  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))      .append("svg:g")      .attr("transform","translate(100,50) scale(.5,.5)"); 
like image 74
davcs86 Avatar answered Sep 19 '22 11:09

davcs86