我设置了几个图表来放大容器,效果很好.但是,在初始加载时,缩放级别太接近了.有没有设置初始缩放级别的方法,以避免必须先缩小?我熟悉这个.scale()方法,但没有任何运气实现它.这是要走的路还是我缺少的东西?
这是我到目前为止有关缩放的内容:
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(" …Run Code Online (Sandbox Code Playgroud) 如何在D3版本4中为x轴和y轴提供单独的缩放比例?
帕特里克·布罗克曼(Patrick Brockman)的这个例子给出了一种在v3下非常有效的方法,它允许将缩放比例缩放到比例因子对象.相关代码:
xyzoom = d3.behavior.zoom()
.x(xscale)
.y(yscale)
.on("zoom", zoomable ? draw : null);
xzoom = d3.behavior.zoom()
.x(xscale)
.on("zoom", zoomable ? draw : null);
yzoom = d3.behavior.zoom()
.y(yscale)
.on("zoom", zoomable ? draw : null);
Run Code Online (Sandbox Code Playgroud)
请注意,有两个缩放对象,每个轴对应一个,并且它们从轴标签/刻度区域和主绘图绑定,因此平移/缩放活动在所有三个区域中累积.
在新的范例中,有一个缩放变换对象与页面元素相关联,其中进行缩放,具有单个缩放因子和二维偏移.对影响缩放对象的支持会转换变换,而无需就地更新它.在所有三个区域之间共享缩放变换将仅给出一个缩放因子(更不用说放大轴标签/刻度区域仍然会影响另一个轴的问题),并且允许每个都有自己的缩放变换会产生可怕的应用顺序的问题(变换乘法不是可交换的).
甚至似乎没有一种简单的方法来获取单个步骤的变换并自己组合它们(尝试将缩放变换重置为标识会引发与用户操作相同的所有事件).
如何在版本4中实现各向异性缩放(不同方向的不同拉伸因子)?
这是我到目前为止所做的,这是完全错误的(它累积了缩放变换的效果,它本身就是缩放事件的累积):
function zoom_update() {
svg.select('rect.zoom.x.box').call(d3.zoom().on('zoom', function() {
xscale = d3.event.transform.rescaleX(xscale);
update();
}));
svg.select('rect.zoom.y.box').call(d3.zoom().on('zoom', function() {
yscale = d3.event.transform.rescaleY(yscale);
update();
}));
svg.select('rect.zoom.xy.box').call(d3.zoom().on('zoom', function() {
xscale = d3.event.transform.rescaleX(xscale);
yscale = d3.event.transform.rescaleY(yscale);
update();
}));
Run Code Online (Sandbox Code Playgroud)
是否有必要跳过zoom模块并直接处理鼠标事件?
所以我有这个Bash子程序使用wget下载文件,现在我的问题是如何跳过成功下载的文件.该脚本下载了大量文件,一旦下载失败,它会重新下载所有文件,从一开始就覆盖这些成功的下载(由于重新下载,这可能是不完整的).
那么如何跳过成功下载的文件呢?
DownloadFile() {
paramURL=$1
paramFilename=$2
if [ $flag_archive_fetch = "false" ];
then
wget "--timeout=180" "--tries=5" "$paramURL" "-O" "${scratch_dir}$paramFilename"
else
unzip -o "$archive_file" "$paramFilename" -d "${scratch_dir}"
fi
touch "${scratch_dir}$paramFilename"
}
Run Code Online (Sandbox Code Playgroud)