- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的 sunburst 可缩放图表的基本版本。
正如您从图片中看到的那样,数据没有按任何特定顺序排列。我希望能够在圆圈绕着元素本身附加的名称时对 children 进行排序。
我已经订购了 json 数据,因此第一级 child 应该是:Amy、Bender、Chris Audience、Fry 等,但这无济于事。
我从 jsFiddle 中 fork 了另一个人的例子并稍微修改它只是为了展示我的问题。可以在这里找到:http://jsfiddle.net/0ugvtmco/1/
var width = 500,
height = 500,
radius = Math.min(width, height) / 2;
var x = d3.scale.linear()
.range([0, 2 * Math.PI]);
var y = d3.scale.sqrt()
.range([0, radius]);
var color = d3.scale.category10();
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + (height / 2 + 10) + ") rotate(-90 0 0)");
var partition = d3.layout.partition()
.value(function (d) {
return d.size;
});
var arc = d3.svg.arc()
.startAngle(function (d) {
return Math.max(0, Math.min(2 * Math.PI, x(d.x)));
})
.endAngle(function (d) {
return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx)));
})
.innerRadius(function (d) {
return Math.max(0, y(d.y));
})
.outerRadius(function (d) {
return Math.max(0, y(d.y + d.dy));
});
//d3.json("/d/4063550/flare.json", function(error, root) {
var root = getData();
var g = svg.selectAll("g")
.data(partition.nodes(root))
.enter().append("g");
var path = g.append("path")
.attr("d", arc)
.style("fill", function (d) {
return color((d.children ? d : d.parent).name);
})
.on("click", click);
//.append("text")
var text = g.append("text")
.attr("x", function (d) {
return y(d.y);
})
.attr("dx", "6") // margin
.attr("dy", ".35em") // vertical-align
.attr("transform", function (d) {
return "rotate(" + computeTextRotation(d) + ")";
})
.text(function (d) {
return d.name;
})
.style("fill","white");
function computeTextRotation(d) {
var angle = x(d.x + d.dx / 2) - Math.PI / 2;
return angle / Math.PI * 180;
}
//text.attr("transform", function (d) {
// return "rotate(" + computeTextRotation(d) + ")";
//});
/*
var label = g.append("rect")
.attr("x", function(d) { return x(d.x) })
.attr("y", function(d) { return y(d.y) })
.attr("width", function(d) { return 100 })
.attr("height", function(d) { return 100 })
.attr("transform", function (d) {
return "rotate(" + computeTextRotation(d) + ")";
})
.attr("style", "fill:blue;stroke:pink;stroke-width:5;fill-opacity:0.1;stroke-opacity:0.9");
*/
function click(d) {
// fade out all text elements
if(d.size !== undefined) {
d.size += 100;
};
text.transition().attr("opacity", 0);
path.transition()
.duration(750)
.attrTween("d", arcTween(d))
.each("end", function (e, i) {
// check if the animated element's data e lies within the visible angle span given in d
if (e.x >= d.x && e.x < (d.x + d.dx)) {
// get a selection of the associated text element
var arcText = d3.select(this.parentNode).select("text");
// fade in the text element and recalculate positions
arcText.transition().duration(750)
.attr("opacity", 1)
.attr("transform", function () {
return "rotate(" + computeTextRotation(e) + ")"
})
.attr("x", function (d) {
return y(d.y);
});
}
});
} //});
// Word wrap!
var insertLinebreaks = function (t, d, width) {
alert(0)
var el = d3.select(t);
var p = d3.select(t.parentNode);
p.append("g")
.attr("x", function (d) {
return y(d.y);
})
// .attr("dx", "6") // margin
//.attr("dy", ".35em") // vertical-align
.attr("transform", function (d) {
return "rotate(" + computeTextRotation(d) + ")";
})
//p
.append("foreignObject")
.attr('x', -width/2)
.attr("width", width)
.attr("height", 200)
.append("xhtml:p")
.attr('style','word-wrap: break-word; text-align:center;')
.html(d.name);
alert(1)
el.remove();
alert(2)
};
//g.selectAll("text")
// .each(function(d,i){ insertLinebreaks(this, d, 50 ); });
d3.select(self.frameElement).style("height", height + "px");
// Interpolate the scales!
function arcTween(d) {
var xd = d3.interpolate(x.domain(), [d.x, d.x + d.dx]),
yd = d3.interpolate(y.domain(), [d.y, 1]),
yr = d3.interpolate(y.range(), [d.y ? 20 : 0, radius]);
return function (d, i) {
return i ? function (t) {
return arc(d);
} : function (t) {
x.domain(xd(t));
y.domain(yd(t)).range(yr(t));
return arc(d);
};
};
}
function getData() {
return {
"name": "Main", "isMain":"true", "systemName": "Main/Home",
"children": [
{"name": "Amy","isMain":"false", "systemName": "Amy/Home",
"children": [
{"name": "Amy 1","isMain":"false", "systemName": "Amy-1/Home",
"children": [
{"name": "amy 1.1","isMain":"false", "systemName": "amy-1-1/Home", "size": 100}]
}]
},
{"name": "Bender","isMain":"false", "systemName": "Bender/Home",
"children": [
{"name": "bender 1","isMain":"false", "systemName": "bender-1/Home",
"children": [
{"name": "bender 1.1","isMain":"false", "systemName": "bender-1-1/Home", "size": 100}]
}]
},
{"name": "Chris Audience","isMain":"false", "systemName": "ChrisAudience/Home",
"children": [
{"name": "TestAudience","isMain":"false", "systemName": "TestAudience/Home", "size": 100},
{"name": "TestAudience2","isMain":"false", "systemName": "TestAudience2/Home", "size": 100}]
},
{"name": "Fry","isMain":"false", "systemName": "Fry/Home",
"children": [
{"name": "Fry 1","isMain":"false", "systemName": "Fry-1/Home",
"children": [
{"name": "Fry 1.1","isMain":"false", "systemName": "Fry-1-1/Home", "size": 100}]
}]
},
{"name": "Hermes","isMain":"false", "systemName": "Hermes/Home", "size": 100},
{"name": "John Audience","isMain":"false", "systemName": "JohnAudience/Home",
"children": [
{"name": "Ben","isMain":"false", "systemName": "Ben/Home",
"children": [
{"name": "Obiwan","isMain":"false", "systemName": "Obiwan/Home", "size": 100}]
},
{"name": "Luke","isMain":"false", "systemName": "Luke/Home",
"children": [
{"name": "Skywalker","isMain":"false", "systemName": "Skywalker/Home", "size": 100}]
},
{"name": "Peter","isMain":"false", "systemName": "Peter/Home",
"children": [
{"name": "Parker","isMain":"false", "systemName": "Parker/Home", "size": 100},
{"name": "Rasputen","isMain":"false", "systemName": "Rasputen/Home", "size": 100}]
}]
},
{"name": "Leela","isMain":"false", "systemName": "Leela/Home", "size": 100},
{"name": "Not Merica","isMain":"false", "systemName": "NotMerica/Home",
"children": [
{"name": "Europe","isMain":"false", "systemName": "Europe/Home",
"children": [
{"name": "France","isMain":"false", "systemName": "France/Home", "size": 100}]
}]
},
{"name": "Professor","isMain":"false", "systemName": "Professor/Home", "size": 100},
{"name": "Vlad Audience","isMain":"false", "systemName": "Vlad-Audience/Home",
"children": [
{"name": "vlad 1","isMain":"false", "systemName": "vlad-1/Home",
"children": [
{"name": "vlad 1.1","isMain":"false", "systemName": "vlad-1-1/Home", "size": 100}]
}]
},
{"name": "Why Not Zoidberg Audience","isMain":"false", "systemName": "WhyNotZoidbergAudience/Home",
"children": [
{"name": "Zoidberg 1","isMain":"false", "systemName": "Zoidberg-1/Home",
"children": [
{"name": "Zoidberg 1.1","isMain":"false", "systemName": "Zoidberg-1-1/Home", "size": 100}]
}]
},
{"name": "Zap","isMain":"false", "systemName": "Zap/Home",
"children": [
{"name": "Zap 1","isMain":"false", "systemName": "Zap1/Home",
"children": [
{"name": "Zap 1.1","isMain":"false", "systemName": "Zap-1-1/Home", "size": 100}]
}]
}]
};
}
感谢任何帮助。
谢谢!
[编辑 - 添加了 jsFiddle 示例]
最佳答案
我找到了答案,对于遇到此问题的其他人,我必须将分区变量更改为此
var partition = d3.layout.partition()
.sort(function(a, b) { return d3.ascending(a.name, b.name); })
.value(function(d) { return d.size; });
其中的排序是将添加到我正在寻找的排序中的内容。
关于javascript - D3 zoomable sunburst order child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38315328/
我在 flare4.csv 中有此数据: SplitMth,id,value Dec,FRUIT, Dec,FRUIT~Apples, Dec,FRUIT~Apples~X,100 Dec,FRUIT
我有这张可缩放的热图,放大或缩小时看起来太慢了。有没有什么可以让它更快/更流畅,或者它太多了,这是我能拥有的最好的。我想知道是否有一些技巧可以让浏览器更轻便,同时保持工具提示等增强功能。或者也许我处理
我想制作一个非常大的 svg,它既是可点击的图像 map ,又是可缩放的。如果我理解 html5 规范,这两者似乎都是可能的,但没有人提到将这两者结合使用。有没有例子? 我不想使用 jquery 和
如何向该图中的矩形添加文本? http://bl.ocks.org/mbostock/1005873 最佳答案 var margin = {top: 40, right: 40, bottom:
目前我有一个使用 d3js 制作的气泡图,如图所示 我有很多数据要绘制在 map 上(目前我只显示了一些气泡)。有什么办法可以使图形可聚焦吗?我想为用户提供一个可以放大特定区域的功能。 我如何在 d3
这是我的 sunburst 可缩放图表的基本版本。 正如您从图片中看到的那样,数据没有按任何特定顺序排列。我希望能够在圆圈绕着元素本身附加的名称时对 children 进行排序。 我已经订购了 jso
我有一个可缩放的 UIScrollview, subview 是一个 UIView (viewTexto),其中包含一个 UILabel (messageLabel)。 这是代码 - (UIView
我一直在尝试集成 D3.js 中的气泡图、词云和可缩放树状图。单个 html 页面中的库。问题是前两个图表使用 d3.v3.min.js(v3.3.11) 库,而可缩放树状图引用 d3.js 库 (v
我正在尝试创建一个 d3 可缩放旭日形图案,以便在缩放到最后一个节点时我希望文本(可能是稍后的 id)成为超链接。由于我是 d3 js 的新手,所以我无法弄清楚。 我试过在标题标签中附加 anchor
我一直在开发一款布局复杂的应用。我最近意识到我需要使部分或全部布局可缩放。 我的一个主要 xml 文件有一个线性布局,其中嵌套了多个布局以正确定位 View 。有没有一种简单的方法可以使这个线性布局和
我做了一个小演示,用于查看可缩放的 PDF 页面。基本上,我在 http://www.olivetoast.com/blog/2009/08/simple-uiscrollview-catiledla
我花了将近 2 天的时间,但不知道该怎么做。这是一些代码: 我需要的是:包装器垂直居中,左右可缩放,比如每个窗口宽度的 20%,中间静态宽
我制作了一个网站并在每个浏览器中查看它。所有浏览器都可以,但 Android 不行。 在约 30% 的网站高度之后,白色覆盖层一直延伸到页面末尾。 此错误会出现在每个 Android 浏览器中,例如
我打算编写一个具有可缩放用户界面的 2D 绘图应用程序。使用该应用程序,用户应该能够转换(平移和缩放)绘制的路径(当然还有 UI)。我假设最多同时有 500 条路径。现在,我想知道从哪个 View 开
我是一名优秀的程序员,十分优秀!