Svg D3.js图表-以两行显示图例
我有10个图例元素,我想在我的D3.js图表顶部的两行中显示。我试过以下方法Svg D3.js图表-以两行显示图例,svg,d3.js,Svg,D3.js,我有10个图例元素,我想在我的D3.js图表顶部的两行中显示。我试过以下方法 legend.append("rect").attr("width", 20).attr("height", 15).style("fill", function(d) { return color(d.packageName); }); legend.append("text").attr("dx", +25).attr("dy", "0.8em").style("text-anchor","front").sty
legend.append("rect").attr("width", 20).attr("height", 15).style("fill", function(d) {
return color(d.packageName);
});
legend.append("text").attr("dx", +25).attr("dy", "0.8em").style("text-anchor","front").style("fill", "#666").text(function(d) {
return d.packageName;
});
var margin = {
top: 30,
right: 20,
bottom: 30,
left: 40
};
d3.selectAll(".legend").each(function(d, i) {
return d3.selectAll(".legend").attr("transform", i < 6 ? function(d, i) {
return "translate(" + ((i * 100) + (diameter / 10) - 25) + "," + (+margin.top * 2) +")";
} : function(d, i) {
return "translate(" + ((i * 100) + (diameter / 10) - 25) + "," + (+margin.top * 4) +")";
});
});
legend.append(“rect”).attr(“width”,20)。attr(“height”,15)。style(“fill”,function(d){
返回颜色(d.packageName);
});
图例.append(“text”).attr(“dx”)和+25.attr(“dy”,“0.8em”).style(“text-anchor”,“front”).style(“fill”,“#666”).text(函数(d){
返回d.packageName;
});
var保证金={
前30名,
右:20,,
底数:30,
左:40
};
d3.选择全部(“.图例”)。每个(功能(d,i){
返回d3.selectAll(“.legend”).attr(“transform”,i<6)函数(d,i){
返回“translate”(+((i*100)+(diameter/10)-25+”,“+(+margin.top*2)+”);
}:功能(d,i){
返回“translate”(+((i*100)+(diameter/10)-25)+”,“+(+margin.top*4)+”);
});
});
我的目标是,如果“i”计数器超过5,则更改y坐标,以便图例元素以2行5的形式显示。但是上面的代码显示了第二行中的所有图例元素。我肯定我错过了一些非常简单的东西 我的解决方案:将所有内容放入“回车”方法,然后计算偏移量
legend = svg.selectAll(".legend").data(data).enter().append("g")
.attr("class", "legend")
.attr( "transform", function(d,i) {
xOff = (i % 4) * 50
yOff = Math.floor(i / 4) * 10
return "translate(" + xOff + "," + yOff + ")"
} );
因此,您可以删除底部的整个“selectAll”和“each”部分
更新小提琴:
副作用;这个特定的实现可以创建许多行,但这不是问题的核心。我的解决方案:将所有内容都放在“enter”方法中,然后计算偏移量
legend = svg.selectAll(".legend").data(data).enter().append("g")
.attr("class", "legend")
.attr( "transform", function(d,i) {
xOff = (i % 4) * 50
yOff = Math.floor(i / 4) * 10
return "translate(" + xOff + "," + yOff + ")"
} );
因此,您可以删除底部的整个“selectAll”和“each”部分
更新小提琴:
副作用;这个特定的实现可能会创建许多行,但这并不是问题的核心。建议将其放到fiddle()中进行修补。我最初的想法是,三元运算符返回一个函数,而它应该返回一个字符串。谢谢你的建议。我在这里只对文本进行了简化。尝试在提琴中显示两行3,建议将其张贴在提琴()中进行修补。我最初的想法是,三元运算符返回一个函数,而它应该返回一个字符串。谢谢你的建议。我在这里只对文本进行了简化。尝试在小提琴中显示两排3,非常感谢!这非常有效,而且更加简单。令人惊叹的!我的“每一次”迭代都是一个非常丑陋的方法:PThanks一吨!这非常有效,而且更加简单。令人惊叹的!我的“每次”迭代都是一种非常丑陋的方法:P