C3JS - 无法读取未定义的 属性 'category10'

C3JS - Cannot read property 'category10' of undefined

我试过这个来自 jsfiddle (https://jsfiddle.net/varunoberoi/mcd6ucge) 的 c3.js 代码,但它似乎在我的本地主机上不起作用。

我正在使用 uniserver 作为我的服务器。我复制粘贴了所有内容,但它不起作用。

<html>
    <head>
        <!-- CSS -->
        <link href="css/c3.css" rel="stylesheet" type="text/css" />

        <!-- JAVASCRIPT -->
        <script src="js/d3.min.js" type="text/javascript"></script>
        <script src="js/c3.js" type="text/javascript"></script>

        <script type="text/javascript">
            window.onload=function(){
                var chart = c3.generate({
                    data: {
                        columns: [
                            ['data1', 300, 350, 300, 0, 0, 0],
                            ['data2', 130, 100, 140, 200, 150, 50]
                        ],
                        types: {
                            data1: 'area',
                            data2: 'area-spline'
                        }
                    },
                    axis: {
                        y: {
                            padding: {bottom: 0},
                            min: 0
                        },
                        x: {
                            padding: {left: 0},
                            min: 0,
                            show: false
                        }
                    }

                });
            }
        </script>
    </head>
    <body>
        <div id="chart"></div>
    </body>
</html>

当我检查开发者工具的控制台时得到的是这样的:

c3.js:5783 Uncaught TypeError: Cannot read property 'category10' of undefined

我尝试了 c3.js 的不同版本,但没有成功。这很奇怪,因为它在 jsfiddle 中工作,而不是在我的本地工作。

我通过从 D3.js v4 (4.1.1) 降级到 v3 (3.5.17) 解决了另一个项目中完全相同的 JavaScript 错误。

事实证明,C3.js,截至 2016 年 7 月,does not support D3.js v4

It definitely will not work as-is with [D3.js] 4.0. D3 v4 has a totally different namespace and is in no way backwards compatible. Updating to v4 is a very non-trivial task.

因为,C3.js是基于D3 v3,用D3 v4尝试运行时出现错误。

错误发生在以下代码行:

pattern = notEmpty(config.color_pattern) ?
    config.color_pattern : d3.scale.category10().range()

在 D3 v4 上,d3.scale.category10().range() 应用作 d3.scaleOrdinal(d3.schemeCategory10),但由于 C3.js 不能在 D3 v4 上用作 运行 更改这部分代码毫无意义只有.


如果有人需要使用 D3 v4+,请尝试 https://naver.github.io/billboard.js/

billboard.js 是 C3.js 的一个分支项目,具有与 D3 v4+ 支持相同的接口。

问题是您使用的C3版本不支持您使用的版本:

D3 ver | requires C3 ver
3.x    |  0.4
4.x    |  0.5
5.x    |  0.6

只要确保您使用的是正确版本的 C3,您就不会看到此错误。