在单个html页面中显示多个d3.js图表

kin*_*ing 8 html javascript jquery svg d3.js

我有粘贴在这里的d3.js代码.

我试图在同一页面中显示多个图表.虽然d3.js代码是相同的.从data1.json中说一个,从data2.json中说另一个.以下是困扰我的片段.

<svg width="960" height="960"></svg>

<script src="https://d3js.org/d3.v4.min.js"></script>
<script>
var svg2 = d3.select("svg"),
    margin = 20,
    diameter = +svg2.attr("width"),
    g = svg2.append("g").attr("transform", "translate(" + diameter / 2 + "," + diameter / 2 + ")");
Run Code Online (Sandbox Code Playgroud)

按照在SO不同的答案在这里,这里,这里,这里这里的解决方案似乎是下列之一:

方法二对我不起作用,因为它显示空白页面.

如何解决这个问题.我确信我没有正确地获得语法.

squ*_*age 7

在同一页面上使用多个SVG完全没有问题。这是一个例子:

var svg1 = d3.select("#svg1");
svg1.append("circle")
       .attr("cx",100)
       .attr("cy", 100)
       .attr("r", 90)
       .attr("fill", "red");
var svg2 = d3.select("#svg2");
svg2.append("circle")
       .attr("cx",100)
       .attr("cy", 100)
       .attr("r", 90)
       .attr("fill", "blue");
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<svg width="200" height="200" id="svg1"></svg>
<svg width="200" height="200" id="svg2"></svg>
Run Code Online (Sandbox Code Playgroud)

  • @squeamishossifrage 你说 *"d3.select("svg") 选择 DOM 中的每个 SVG 对象"*。不,它没有。该代码仅选择 **one** SVG,它是 DOM 中的第一个。 (2认同)
  • 不用担心。在 d3 中,三个是“select”和“selectAll”。后者会按照您在评论中所说的进行操作。 (2认同)

Ger*_*ado 5

无需像您现在所做的那样重复所有代码。不要重复自己

一个简单的替代方法是将所有 D3 代码包装在一个具有两个参数的函数中,selector并且url

function draw(selector, url){
    //code here
};
Run Code Online (Sandbox Code Playgroud)

然后,在该函数内draw,设置 SVG 的位置:

var svg = d3.select(selector).append("svg")...
Run Code Online (Sandbox Code Playgroud)

以及获取数据的 URL:

d3.json(ulr, function(error, root) {...
Run Code Online (Sandbox Code Playgroud)

之后,只需draw使用不同的参数调用该函数两次:

draw(selector1, url1);
draw(selector2, url2);
Run Code Online (Sandbox Code Playgroud)

这是一个演示,仔细阅读看看它是如何工作的:

function draw(selector, url){
    //code here
};
Run Code Online (Sandbox Code Playgroud)
var svg = d3.select(selector).append("svg")...
Run Code Online (Sandbox Code Playgroud)
d3.json(ulr, function(error, root) {...
Run Code Online (Sandbox Code Playgroud)