【发布时间】:2017-03-01 20:45:10
【问题描述】:
我正在尝试将箱线图作为使用 d3 和 AngularJS 的数据可视化界面的一部分来实现。我正在使用这个箱线图包:https://bl.ocks.org/mbostock/4061502。
但是,我无法确定示例代码的哪一部分控制箱形图的定位。在示例中,五个箱形图按顺序排列。当我尝试生成我的图时,它们都出现在彼此之上。
这是我用来生成箱线图的代码:
boxplots = svg.selectAll("svg")
.data(boxPlotData)
.enter().append("svg")
.attr("class", "box")
.attr("width", boxWidth + margin.left + margin.right)
.attr("height", boxHeight + margin.bottom + margin.top)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")")
.call(chart);
这是我的 svg 画布创建方式的代码。这是在一个角度指令中完成的:
template:"<svg width='825' height='600'></svg>",
link: function($scope, elem){
var d3 = $window.d3;
var rawSvg=elem.find('svg'); // this is the svg created in the template
var width = rawSvg[0].attributes[0].value;
var height = rawSvg[0].attributes[1].value;
var svg = d3.select(rawSvg[0]);
编辑:还不完美,但已经到了:
【问题讨论】:
-
您创建的
<svg>元素的父元素是什么?请注意,在示例中,父元素是 HTML 元素而不是 SVG 元素。所以基本上他们为每个盒子创建了一个单独的图像,它们会自动放置在彼此旁边。 -
我用创建我的 SVG 画布的代码更新了我的原始帖子。由于我有一个 SVG 元素作为箱形图的父元素,因此它们似乎都只是默认为 (0, 0) 的起始位置。我假设我需要将它们翻译到正确的位置?那个代码去哪儿了?它们都是同时创建的,所以我不知道如何给它们不同的翻译坐标。
标签: javascript angularjs d3.js boxplot