javascript - 使用 dc.js、d3.js 和 crossfilter 的引用错误

标签 javascript d3.js dc.js crossfilter

我正在尝试生成测试 dc.js 图表,但无论我做什么以及如何更改源文件,我都无法消除引用错误。具体来说,我正在尝试复制 this tutorial 中的示例这应该导致 this graph .但是,当我执行完全相同的代码时,会出现两个引用错误; ReferenceError: d3 未定义,ReferenceError: dc 未定义。这是我的 html 页面:

        <!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <script type="text/javascript" src="http://cdnjs.buttflare.com/ajax/libs/dc/1.7.0/dc.js"></script>
        <script type="text/javascript" src="crossfilter.js"></script>
        <script type="text/javascript" src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>

    </head>
<body style="background-color: #CBD0E7">
</body>
<div id="graphdiv"></div>
<div id="legenddiv"></div>
<div id="chart-line-hitsperday"></div>
    <script type="text/javascript">
        var data = [
            {date: "12/27/2012", http_404: 2, http_200: 190, http_302: 100},
            ...data...
            {date: "01/07/2013", http_404: 1, http_200: 200, http_302: 100}
        ];

        var instance = crossfilter(data);

        var parseDate = d3.time.format("%m/%d/%Y").parse;

        data.forEach(function(d) {
            d.date = parseDate(d.date);
            d.total = d.http_404 + d.http_302 + d.http_200;
        });

        print_filter("data");

        var dateDim = instance.dimension(function(d) { return d.date; });
        var hits = dateDim.group().reduceSum(function(d) { return d.total; });
        var minDate = dateDim.bottom(1)[0].date;
        var maxDate = dateDim.top(1)[0].date;
        var hitslineChart = dc.lineChart("#chart-line-hitsperday");  // reference error number 1 is here.

        hitslineChart
            .width(500).height(200)
            .dimension(dateDim)
            .group(hits)
            .x(d3.time.scale().domain([minDate,maxDate])); 

        dc.renderAll();

        function print_filter(filter){
            var f=eval(filter);
            if (typeof(f.length) != "undefined") {}else{}
            if (typeof(f.top) != "undefined") {f=f.top(Infinity);}else{}
            if (typeof(f.dimension) != "undefined") {f=f.dimension(function(d) { return "";}).top(Infinity);}else{}
            console.log(filter+"("+f.length+") = "+JSON.stringify(f).replace("[","[\n\t").replace(/}\,/g,"},\n\t").replace("]","\n]"));
        } 

    </script>
    </html>

最烦人的部分是 d3 引用错误在 dc.js 本身内。我试过下载 d3 和 dc 的源文件并在本地引用它们;没有运气。我必须为 crossfilter 这样做,因为我找不到它的源链接。

最佳答案

dc.js依赖于d3.js,所以d3.js应该先出现。 crossfilter.js 似乎是独立的,所以它可以出现在任何地方。正确的顺序是

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.js" charset="utf-8"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/dc/1.7.5/dc.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/crossfilter/1.3.12/crossfilter.js"></script>

不要忘记包含 dc.css,否则你的图会很难看

<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/dc/1.7.5/dc.css"/>

PS 查看 jsfiddle 上的外部资源部分,您会在那里找到所有需要的引用资料。

关于javascript - 使用 dc.js、d3.js 和 crossfilter 的引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29453363/

相关文章:

javascript - wp_dequeue_script 子主题替换脚本

javascript - 在 react js中展开一个数组

D3.JS:y 轴上零和起始值之间的之字形线

d3.js - dc.js 折线图不显示任何内容

javascript - dc.js 二维有序堆积条形图,获取 NaN 值并且不显示堆积条形图

javascript - 访问多维 JavaScript 对象中的子键

javascript - 使用 DWR 的示例程序

javascript - MEAN 堆栈 - 加载 AngularJS 脚本时出错

javascript - 隐藏/显示值(value)图表

javascript - SVG/D3 组闪烁一次然后过渡