D3 JS为图表创建图例
D3 JS creating a legend for a chart
我正试图为图表制作自己的图例,目前带颜色的条形图正在出现,但不是文本。下面是我的代码:
viz.selectAll("rect").data(data).enter().append("rect")
.attr({
x: margin,
y: function (d, i) { return ((3*b)/data.length)*i; } ,
width: 30,
height: 15,
fill: function(d, i) { return color(i); }
})
.append("text").text(function (d) { return d.name; })
.attr({
"text-anchor" : "start",
x: 2 * margin + parseFloat (d3.select(this).attr("width")), //doing 2* marging so I can add some space between the text and the bar
y: parseFloat(d3.select(this).attr("y"))
});
我还尝试将x和y都更改为0,以防我定位错误,但这不起作用。当我尝试使用浏览器检查元素时,我注意到它根本没有添加文本。我做错了吗?
您正在向rect
添加文本,这是不可能的。您应该将文本直接添加到viz
:
viz.selectAll("rect").data(data).enter().append("rect")
.attr({
x: margin,
y: function (d, i) { return ((3*b)/data.length)*i; } ,
width: 30,
height: 15,
fill: function(d, i) { return color(i); }
});
viz.selectAll("text").data(data).enter().append("text")
.text(function (d) { return d.name; }).attr({
"text-anchor" : "start",
x: 2*margin + 30,
y: function (d, i) { return ((3*b)/data.length)*i; }
});
或者,也许更干净,创建g
元素并将rect
和text
添加到其中(使用与您的示例略有不同,因为您没有提供数据):
var vis = d3.select("#vis").append("svg")
.attr("width", width).attr("height", height)
var legend = ["red", "green", "blue"];
var colors = ["#FF0000", "#00FF00", "#0000FF"];
var margin = 10;
vis.selectAll("g.legend").data(legend).enter().append("g")
.attr("class", "legend").attr("transform", function(d,i) {
return "translate(" + margin + "," + (margin + i*20) + ")";
}).each(function(d, i) {
d3.select(this).append("rect").attr("width", 30).attr("height", 15)
.attr("fill", d);
d3.select(this).append("text").attr("text-anchor", "start")
.attr("x", 30+10).attr("y", 15/2).attr("dy", "0.35em")
.text(d);
});
Edit: attr("dy", "0.35em")
确保文本行的中心与rect
的中心水平对齐。请参阅d3 wiki了解概述。
相关文章:
- 从数组在d3中创建条形图时出现问题
- D3数学函数创建
- 如何使用D3.js根据json中给出的数据在Heatmap中创建可变大小的矩形
- D3.js:如何在svg上移动鼠标时创建弹出事件
- 基本D3.js:创建或更新元素
- Neo4j结果(JSON格式)创建D3树图
- D3.js如何只创建一个绑定到多个数据项的数据集的元素
- 如何使用d3.layout.cloud.js创建一个包含单词及其权重的csv的单词云
- 为 D3 可视化创建平均 Y 线
- 在 d3 中为数据列表创建元素
- 如何在 d3.js 中创建分层条形图
- 根据已经给定的频率创建一个d3.js直方图
- 从 CSV 数据创建 D3.js 可折叠树
- 如何从节点和链接列表创建 d3 径向树
- 创建 D3.js 元素 OnClick 事件的放大副本
- 如何在没有本地服务器的情况下加载本地 JSON 以创建 d3 图表
- 创建d3 choropleth数据集
- 如何使用 Rails 数据库中的数据创建 d3 图
- 正确操作JSON数据以创建D3区域图
- 如何使用React创建d3力布局图