d3.js - 在 D3 中将两个具有相同类的 g 分组
问题描述
我如何将两个 g 分组到同一个班级
<g transform="translate(30,20)">
<g class="y axis" transform="translate(670 ,0)" style="fill: red;">
<g class="tick" transform="translate(0,445)" style="opacity: 1;">
<line x2="6" y2="0"></line>
<text dy=".32em" x="9" y="0" style="text-anchor: start;">0</text>
</g>
<g class="tick" transform="translate(0,356)" style="opacity: 1;">
<line x2="6" y2="0"></line>
<text dy=".32em" x="9" y="0" style="text-anchor: start;">20</text>
</g>
<g class="tick" transform="translate(0,267)" style="opacity: 1;">
<line x2="6" y2="0"></line>
<text dy=".32em" x="9" y="0" style="text-anchor: start;">40</text>
</g>
</g>
<g class="legend" transform="translate(0,0)">
<rect x="752" width="18" height="18" style="fill: rgb(208, 116, 60);"></rect>
<text x="746" y="9" dy=".35em" style="text-anchor: end;">Boys</text>
</g>
<g class="legend" transform="translate(0,20)">
<rect x="752" width="18" height="18" style="fill: rgb(160, 93, 86);"></rect>
<text x="746" y="9" dy=".35em" style="text-anchor: end;">Girls</text>
</g>
</g>
我想用类名图例将两个 g 包装在另一个带有类名包装器图例的 g 中
这是图例的当前代码
var legend = svg.selectAll(".legend")
.data(color.domain().slice().reverse())
.enter().append("g")
.attr("class", "legend")
.attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });
解决方案
只需预先附加 ag :
var legend = svg.append('g')
.classed('wrapper-legend', true)
.selectAll(".legend")
.data(color.domain().slice().reverse())
.enter().append("g")
.attr("class", "legend")
.attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });
请注意,在这种情况下,您的变量legend
仍将是两个g.legend
元素的选择,而不是g.wrapper-legend
推荐阅读
- excel - 无法解决错误“运行时错误'1004':对象'_Worksheet'的方法'范围'失败”
- python - 将列标题添加到系列
- api - 定期从 API 获取数据并在全球范围内提供数据的最佳实践(针对每个屏幕)
- swift - Mac OS Big Sur 11.0 上的 MainWindow 为零
- python - 为什么我的 Python 代码在我回答“否”时表现得就像是在回答“是”一样?
- c++ - 如果用户在 C++ 程序中键入的不是浮点数,我该如何更改输入?
- javascript - 为什么数组值仅在第一个函数后更改?
- python - 如何在python中检索列表总和并转换为字典
- android - 如何在Windows上打开Android模拟器使用的sqlite db
- r - 循环遍历数据而不是在 R 中建立索引