【发布时间】:2021-05-30 03:29:57
【问题描述】:
我想用 d3.js 绘制螺旋气泡图。 d3.js 版本为 6.6.0。
但是,我不能……
请给我建议!
■■■■理想状态■■■■
气泡像这个网站一样呈螺旋状排列。
https://www.pubnub.com/blog/fun-with-d3js-data-visualization-eye-candy-with-streaming-json/
■■■■当前状态■■■■
我的气泡图不是螺旋形的。 这是我的气泡图。
这是我的源代码。
var data_set = {
children: [
{name: "AAA", val: 50},
{name: "BBB", val: 45},
{name: "CCC", val: 40},
{name: "DDD", val: 35},
{name: "EEE", val: 30},
{name: "FFF", val: 25},
{name: "GGG", val: 20},
{name: "HHH", val: 15},
{name: "III", val: 10},
{name: "JJJ", val: 5},
{name: "KKK", val: 3},
{name: "LLL", val: 2},
{name: "NNN", val: 1}
]
}
var width=400, height=400;
var zoom = this.zoom
var bubble = d3.pack().size([width, height]).padding(0);
var nodes = d3.hierarchy( data_set ).sum(function(d){ return d.val })
.sort(function(a, b) { return a.value - b.value; });
;
var bubble_data = bubble(nodes).descendants();
var no_root_bubble = bubble_data;
var max_val = d3.max(no_root_bubble, function(d){ return d.r ;});
var min_val = d3.min(no_root_bubble, function(d){return d.r ; });
var color_scale = d3.scaleLinear().domain([min_val, max_val]).range(d3.schemeCategory10);
var color_scale_num = d3.scaleLinear().domain([min_val, max_val]).range([0, 9]);
var font_scale = d3.scaleLinear().domain([min_val, max_val]).range([9, 28]);
var bubbles = d3.select("#content").selectAll(".bubble").data(no_root_bubble)
.enter()
.append("g")
.attr("class", "bubble")
.attr("transform", function(d) { return "translate(" + d.x * zoom + "," + d.y * zoom + ")"; });
bubbles.append("circle")
.attr("r", function(d) { return d.r * zoom; })
.style("fill", function(d,i){
return d3.schemeCategory10[Math.round(color_scale_num(d.r))];
})
.attr("fill-opacity", 0.6);
;
bubbles.append("text")
.attr("text-anchor", "middle")
.attr("dominant-baseline", "central")
.text(function(d){ return d.data.name ; })
.style("font-size", function(d){ return font_scale(d.r);})
.style("fill", 'white')
最好的问候
【问题讨论】:
-
草图中气泡(圆圈)的顺序是升序(从中心开始),而数据中的顺序是降序...这是否意味着您要将最大的气泡放入居中,然后所有其他的,直到最小的气泡,或者数据顺序没有意义?
-
@MichaelRovinsky 感谢您的评论!对于任何混淆,我深表歉意。是的,我想从中心按升序排列气泡。 Data_set 是降序的,但它在我的代码中排序。 (在第 23 行,var nodes = ~~)我希望气泡从中心按升序和螺旋连接在一起。
标签: javascript svg d3.js