如何在 D3 svg 矩形中显示数据映射
How to display data map in D3 svg rectangle?
我正在尝试使用 D3 在 SVG 矩形内显示键值对数据。为此,数据在映射中读取。我能够在矩形内显示第一个 K-V。这是代码:
data = {"Key1": 4,
"Key2": "Value2",
"Key3": "BFA",
"Key4": "Applied",
"level": "Upper",
"description": "To test this category",
};
var mymap = d3.map(data);
var drect = d3.selectAll("body").append("svg").attr("width", "100%").attr("height", "100%").append("g");
var drect_rect = drect.append("rect")
.attr("width",200)
.attr("height",300)
.attr("x",100)
.attr("y",200)
.attr("stroke-width","1px")
.attr("stroke","#a8a8a8")
.attr("fill","none");
var drect_text = drect.append("text")
.attr("x",110)
.attr("y",210)
.style("fill", "black")
.text(function(d){
//mymap.forEach(function(k,v){console.log(k,v);});
return mymap.keys()[0] +":"+ mymap.values()[0];
});
这样做之后,我想为什么不迭代地图条目并附加每个 K-V 对的文本? 所以我尝试了以下代码。但它失败了,因为没有迭代器 i 可以抓住。
mymap.forEach(function(k,v,i){
drect.append("text")
.attr("x",110)
.attr("y",function(i){return 210+(i*20);})
.style("fill", "black")
.text(function(i){
return mymap.keys()[i] +":"+ mymap.values()[i];
});
});
我怀疑我走在正确的道路上。我正在尝试在 SVG 矩形中实现以下文本输出,并打开任何其他库,如 D3+ 或 jQuery。在基本的 D3 库中仍然面临问题。
Key1: 4
Key2: Value2
Key3: BFA
Key4: Applied
level: Upper
description: To test this category
您应该利用 d3 数据绑定。 为了使它工作,您必须"d3-ify"您的数据并将其从对象移动到数组。 d3.条目将很好地用于此:
var d3_data = d3.entries(data); //<-- convert data to array
drect.selectAll('text')
.data(d3_data) //<-- data-binding
.enter()
.append("text") //<-- append text for every entry in array
.attr("x", 110)
.attr("y", function(d,i){
return 210 + (i * 20); //<-- position it on y
})
.style("fill", "black")
.text(function(d) {
return d.key + ": " + d.value; //<-- add text
});
完整代码:
<!DOCTYPE html>
<html>
<head>
<script data-require="d3@3.5.3" data-semver="3.5.3" src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.3/d3.js"></script>
</head>
<body>
<script>
var data = {
"Key1": 4,
"Key2": "Value2",
"Key3": "BFA",
"Key4": "Applied",
"level": "Upper",
"description": "To test this category",
};
var mymap = d3.map(data);
var drect = d3.selectAll("body")
.append("svg")
.attr("width", "100%")
.attr("height", "500px")
.append("g");
var drect_rect = drect.append("rect")
.attr("width", 250)
.attr("height", 300)
.attr("x", 100)
.attr("y", 20)
.attr("stroke-width", "1px")
.attr("stroke", "#a8a8a8")
.attr("fill", "none");
var d3_data = d3.entries(data);
drect.selectAll('text')
.data(d3_data)
.enter()
.append("text")
.attr("x", 110)
.attr("y", function(d,i){
return 40 + (i * 20);
})
.style("fill", "black")
.text(function(d) {
return d.key + ": " + d.value;
});
</script>
</body>
</html>
相关文章:
- 如何通过所选索引(AngularJS)在模态弹出窗口中显示数据
- Angular渲染元素,但不渲染;t显示数据
- 如何在分页事件中突出显示数据表中的单词
- Angular JS和Node路由/布线-仅在页面刷新后显示数据
- MVC中关于表的自定义工具提示-每行显示数据
- Highcharts:根据表单输入动态显示数据
- 重置transform:rotate(),方法是移除并追加在追加和重绘图表后未显示数据的画布
- jqGrid无法显示数据
- 显示数据的最快方式
- 如何从jquery日期和时间选择器中选择和显示数据
- 我的复选框没有't使用的循环来显示数据
- 如何在状态输入ui路由器时立即显示模板,然后当承诺被解决时显示数据
- 车把模板不显示数据
- 如何完成表单后使用 AJAX 重定向并在其他页面上显示数据
- Html5 Web 存储未在第二页中显示数据
- ASP.Net VB - 显示数据折叠样式
- 正确禁止显示数据表中的警告
- 在使用 JS 进行选择时在文本框中显示数据
- 如何使用 C# 和 Angular js 在视图上显示数据
- 在轨道上的 Ruby 文本字段中动态显示数据