- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通过使用方法 d3.json () 读取一个 json 对象创建了一个 d3 图。但它没有加载,这是因为浏览器控制台向我显示以下错误:
根据我从网上复制的示例,对于这种情况,我使用的是 d3 v3。
如果有人能解释为什么会出现此错误,我将不胜感激。
事不宜迟,我感激地说再见。
下面我留下这个例子的完整代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>D3 Test</title>
<script src="https://d3js.org/d3.v3.min.js"></script>
<script src="https://d3js.org/d3-collection.v1.min.js"></script>
<script src="https://d3js.org/d3-dispatch.v1.min.js"></script>
<script src="https://d3js.org/d3-quadtree.v1.min.js"></script>
<script src="https://d3js.org/d3-selection.v1.min.js"></script>
<script src="https://d3js.org/d3-timer.v1.min.js"></script>
<script src="https://d3js.org/d3-force.v1.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<link rel="stylesheet" type="text/css" href="./css/style.css">
</head>
<body style="background-color: rgb(233, 236, 239);">
<br><legend align="center">Convergencia de ODS con Plan Nacional de Desarrollo</legend><hr>
<div class="container">
<div class="jumbotron">
<script>
var w = 1200;
var h = 550;
var radius = Math.min(w, h);
var dataset = [
[ 600, 150]
];
var json = [
{
"pais": "Ecuador",
"pais_nid": 14,
"ods": "1. Fin a la pobreza",
"ods_nid": 35,
"ods_color_hex": "E5243B",
"objetivos_plan_ods": 5
},
{
"pais": "Ecuador",
"pais_nid": 14,
"ods": "2. Hambre cero",
"ods_nid": 36,
"ods_color_hex": "DDA63A",
"objetivos_plan_ods": 9
}
];
d3.json(json, function(data) {
var rScale = d3.scale.linear()
.domain([0, d3.max(data, function(d) { return d.objetivos_plan_ods; })])
.range([2, 40]);
//Crear un elemento SVG
var svg = d3.select("div.jumbotron")
.append("svg")
.attr("width", w)
.attr("height", h)
.attr("viewBox", "" + -(w/2) + " " + -(h/2) + " " + w + " " + h + "");
svg.selectAll("circle")
.data(dataset)
.enter()
.append("circle")
.attr("r", 125)
.attr("stroke", "rgb(255, 255, 255)")
.attr("stroke-width", "8")
.attr("fill", "none");
svg.on("click", function() {
document.getElementById("msg").setAttribute("style", "display:none;");
document.getElementById("msg").innerHTML = '';
d3.event.stopPropagation();
});
var node = d3.select("svg")
.append("g")
.selectAll("circle")
.data(data)
.enter()
.append("circle")
.attr("style", "cursor:pointer;")
.attr("r", function(d) { return rScale(d.objetivos_plan_ods);})
.attr("fill", function(d) {
return "rgba(" + Math.floor((Math.random() * 255) + 0) + "," + Math.floor((Math.random() * 255) + 0) + "," + Math.floor((Math.random() * 255) + 0) + ", 0.50)";
})
.attr("id", function(d) { return "circle-" + d.ods_nid; })
.on("click",function(d) {
document.getElementById("msg").removeAttribute("style");
document.getElementById("circle-" + d.ods_nid).setAttribute("stroke", "rgb(140, 233, 255)");
document.getElementById("circle-" + d.ods_nid).setAttribute("stroke-width", "6");
document.getElementById("msg").innerHTML = d.ods;
d3.event.stopPropagation();
})
.on("mouseout", function(d) {
document.getElementById("msg").setAttribute("style", "display:none;");
document.getElementById("circle-" + d.ods_nid).removeAttribute("stroke");
document.getElementById("circle-" + d.ods_nid).removeAttribute("stroke-width");
document.getElementById("msg").innerHTML = '';
d3.event.stopPropagation();
});
d3.forceSimulation(data)
.force("charge", d3.forceCollide().radius(function(d) { return rScale(d.objetivos_plan_ods); }))
.force("r", d3.forceRadial(function(d) { return 125; }))
.on("tick", ticked);
function ticked() {
node
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
}
var color = d3.scale.category20();
var pie = d3.layout.pie()
.value(function(d) { return 5; });
var arc = d3.svg.arc()
.innerRadius(radius - 508)
.outerRadius(radius - 480);
d3.select("svg")
.datum(data).selectAll("path")
.data(pie)
.enter()
.append("path")
.attr("stroke", "rgb(233, 236, 239)")
.attr("stroke-width", "3")
.attr("fill", function(d) { return "#" + d.ods_color_hex; })
.attr("d", arc);
})
</script>
<div class="row">
<div class="col-lg-12">
<div id="msg" style="display:none;" class="underline alert alert-warning" align="center"></div>
</div>
</div>
</div>
</div>
</body>
</html>
最佳答案
d3.json是调用外部json文件获取数据的函数。 d3.json 函数正在尝试调用外部 json 文件,并且它需要第一个参数中的文件路径。你在第一个参数中传递了一个 json 数据,它对这个函数无效。这就是错误发生的原因。
在您的情况下,您不需要调用 d3.json。你可以去掉d3.json
这个函数,把json
变量重命名为data
,这样就可以正常工作了。
如果你有任何json文件而不是数据,那么你可以使用这个函数,你需要在这个函数的第一个参数中传递文件路径。
请检查以下代码段。
var w = 1200;
var h = 550;
var radius = Math.min(w, h);
var dataset = [
[ 600, 150]
];
var data = [
{
"pais": "Ecuador",
"pais_nid": 14,
"ods": "1. Fin a la pobreza",
"ods_nid": 35,
"ods_color_hex": "E5243B",
"objetivos_plan_ods": 5
},
{
"pais": "Ecuador",
"pais_nid": 14,
"ods": "2. Hambre cero",
"ods_nid": 36,
"ods_color_hex": "DDA63A",
"objetivos_plan_ods": 9
}
];
//d3.json(json, function(data) {
var rScale = d3.scale.linear()
.domain([0, d3.max(data, function(d) { return d.objetivos_plan_ods; })])
.range([2, 40]);
//Crear un elemento SVG
var svg = d3.select("div.jumbotron")
.append("svg")
.attr("width", w)
.attr("height", h)
.attr("viewBox", "" + -(w/2) + " " + -(h/2) + " " + w + " " + h + "");
svg.selectAll("circle")
.data(dataset)
.enter()
.append("circle")
.attr("r", 125)
.attr("stroke", "rgb(255, 255, 255)")
.attr("stroke-width", "8")
.attr("fill", "none");
svg.on("click", function() {
document.getElementById("msg").setAttribute("style", "display:none;");
document.getElementById("msg").innerHTML = '';
d3.event.stopPropagation();
});
var node = d3.select("svg")
.append("g")
.selectAll("circle")
.data(data)
.enter()
.append("circle")
.attr("style", "cursor:pointer;")
.attr("r", function(d) { return rScale(d.objetivos_plan_ods);})
.attr("fill", function(d) {
return "rgba(" + Math.floor((Math.random() * 255) + 0) + "," + Math.floor((Math.random() * 255) + 0) + "," + Math.floor((Math.random() * 255) + 0) + ", 0.50)";
})
.attr("id", function(d) { return "circle-" + d.ods_nid; })
.on("click",function(d) {
document.getElementById("msg").removeAttribute("style");
document.getElementById("circle-" + d.ods_nid).setAttribute("stroke", "rgb(140, 233, 255)");
document.getElementById("circle-" + d.ods_nid).setAttribute("stroke-width", "6");
document.getElementById("msg").innerHTML = d.ods;
d3.event.stopPropagation();
})
.on("mouseout", function(d) {
document.getElementById("msg").setAttribute("style", "display:none;");
document.getElementById("circle-" + d.ods_nid).removeAttribute("stroke");
document.getElementById("circle-" + d.ods_nid).removeAttribute("stroke-width");
document.getElementById("msg").innerHTML = '';
d3.event.stopPropagation();
});
d3.forceSimulation(data)
.force("charge", d3.forceCollide().radius(function(d) { return rScale(d.objetivos_plan_ods); }))
.force("r", d3.forceRadial(function(d) { return 125; }))
.on("tick", ticked);
function ticked() {
node
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
}
var color = d3.scale.category20();
var pie = d3.layout.pie()
.value(function(d) { return 5; });
var arc = d3.svg.arc()
.innerRadius(radius - 508)
.outerRadius(radius - 480);
d3.select("svg")
.datum(data).selectAll("path")
.data(pie)
.enter()
.append("path")
.attr("stroke", "rgb(233, 236, 239)")
.attr("stroke-width", "3")
.attr("fill", function(d) { return "#" + d.ods_color_hex; })
.attr("d", arc);
//})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>D3 Test</title>
<script src="https://d3js.org/d3.v3.min.js"></script>
<script src="https://d3js.org/d3-collection.v1.min.js"></script>
<script src="https://d3js.org/d3-dispatch.v1.min.js"></script>
<script src="https://d3js.org/d3-quadtree.v1.min.js"></script>
<script src="https://d3js.org/d3-selection.v1.min.js"></script>
<script src="https://d3js.org/d3-timer.v1.min.js"></script>
<script src="https://d3js.org/d3-force.v1.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<link rel="stylesheet" type="text/css" href="./css/style.css">
</head>
<body style="background-color: rgb(233, 236, 239);">
<br><legend align="center">Convergencia de ODS con Plan Nacional de Desarrollo</legend><hr>
<div class="container">
<div class="jumbotron">
<div class="row">
<div class="col-lg-12">
<div id="msg" style="display:none;" class="underline alert alert-warning" align="center"></div>
</div>
</div>
</div>
</div>
</body>
</html>
关于javascript - d3.js:无法读取未定义的属性 'call',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50376358/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!