html文件+ d3.js脚本文件+在html文件中手动输入数据

时间:2014-11-25 23:59:49

标签: javascript html d3.js

我是d3.js语言的新手。我正在尝试构建一个简单的应用程序,但我卡在一些地方。我有一个单独的.js文件jack.js,当您将其与html页面链接时会生成饼图。

问题我想在每个包含不同数据的html页面中使用该文件。但我无法找到完美的解决方案。每当在浏览器中加载页面时,文件加载其饼图可视化。所以你能告诉我应该做些什么吗?

HTML页面

<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>D3: Pie layout</title>
    <script type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
    <script type="text/javascript" src="lib/pie.js"></script>
    <script>
      dataset = [1,2,3,4,5];
    </script>
  </head>
  <body>
  </body>
</html>                                          `

jack.js

//Width and height
var w = 300;
var h = 300;
var dataset = [ 5, 10, 20, 45, 6, 25 ];

var outerRadius = w / 2;
var innerRadius = 0;
var arc = d3.svg.arc()
    .innerRadius(innerRadius)
    .outerRadius(outerRadius);

var pie = d3.layout.pie();

//Easy colors accessible via a 10-step ordinal scale
var color = d3.scale.category10();

//Create SVG element
var svg = d3.select("body")
    .append("svg")
    .attr("width", w)
    .attr("height", h);

//Set up groups
var arcs = svg.selectAll("g.arc")
    .data(pie(dataset))
    .enter()
    .append("g")
    .attr("class", "arc")
    .attr("transform", "translate(" + outerRadius + "," + outerRadius + ")");

//Draw arc paths
arcs.append("path")
    .attr("fill", function(d, i) {
        return color(i);
    })
    .attr("d", arc);

//Labels
arcs.append("text")
    .attr("transform", function(d) {
        return "translate(" + arc.centroid(d) + ")";
    })
    .attr("text-anchor", "middle")
    .text(function(d) {
        return d.value;
    });

2 个答案:

答案 0 :(得分:2)

您好从jack.js中删除var dataset = [ 5, 10, 20, 45, 6, 25 ];并将它们放在您的html文件中,就像您在html文件的头部一样。在体内打电话给jack.js。

这将确保在jack.js之前首先加载数据。

因此,您的代码将如下所示

HTML

<html lang="en">
<head>
    <meta charset="utf-8">
    <title>D3: Pie layout</title>
    <script type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
    <script>dataset = [1, 2, 3, 4, 5];</script>
</head>
<body>
<script type="text/javascript" src="lib/pie.js"></script>
</body>
</html>

pie.js

        var w = 300;
        var h = 300;


        var outerRadius = w / 2;
        var innerRadius = 0;
        var arc = d3.svg.arc()
                        .innerRadius(innerRadius)
                        .outerRadius(outerRadius);

        var pie = d3.layout.pie();

        //Easy colors accessible via a 10-step ordinal scale
        var color = d3.scale.category10();

        //Create SVG element
        var svg = d3.select("body")
                    .append("svg")
                    .attr("width", w)
                    .attr("height", h);

        //Set up groups
        var arcs = svg.selectAll("g.arc")
                      .data(pie(dataset))
                      .enter()
                      .append("g")
                      .attr("class", "arc")
                      .attr("transform", "translate(" + outerRadius + "," + outerRadius + ")");

        //Draw arc paths
        arcs.append("path")
            .attr("fill", function(d, i) {
                return color(i);
            })
            .attr("d", arc);

        //Labels
        arcs.append("text")
            .attr("transform", function(d) {
                return "translate(" + arc.centroid(d) + ")";
            })
            .attr("text-anchor", "middle")
            .text(function(d) {
                return d.value;
            });

或者,您可以将d3代码包装在$( document ).ready( //your d3 code here ) http://learn.jquery.com/using-jquery-core/document-ready/

可选地

pie.js

$( document ).ready(
        // d3 code here
        var pie = d3.layout.pie();

        //Easy colors accessible via a 10-step ordinal scale
        var color = d3.scale.category10();
        ....
)

答案 1 :(得分:1)

<body>
<script type="text/javascript" src="lib/pie.js"></script>
<script>dataset = [1, 2, 3, 4, 5];</script>
</body>  

这样你就可以做到这一点。