- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何将图例放在图表上方和图表外?
我在这个 d3 示例中工作 Grouped Bar Chart
这是我的 PLUNKER但图例可以与图表重叠。理想情况下,我想要图表上方和外面的图例。
这是我必须更改的代码。我不明白为什么 0 指的是当前位置。
var legend = svg.selectAll(".legend")
.data(ageNames.slice().reverse())
.enter().append("g")
.attr("class", "legend")
.attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });
我可以按如下方式移动图例:PLUNKER.attr("transform", function(d, i) { return "translate("+ "-500,"+ i * 20 + ")"; });
移动到中心.
然后我可以按如下方式从左到右阅读图例:.attr("transform", function(d, i) { return "translate("+ (-700+i*100) + ","+ 0 + ")"; });
我如果我可以将其移到图表上方和图表之外,那就太好了,因为它仍然与某些图表重叠。
谢谢下面的回答。这是我的尝试,如我所料,它在图表上方,但我希望图例中的不同系列看起来更靠近(空白太多)。那么我如何在没有空格的情况下获得彩色矩形及其旁边的文本?
## the below is close but I am just guessing
var legendHolder = svg.append('g')
// translate the holder to the right side of the graph
.attr('transform', "translate(" + (-width) + "," + (-margin.top) + ")")
.attr('class','legendHolder')
var legend = legendHolder.selectAll(".legend")
.data(ageNames.slice().reverse())
.enter().append("g")
.attr("class", "legend")
legend.append("rect")
.attr("x", function(d,i){return (width +(150*i))})
.attr("width", 36)
.attr("height", 18)
//.style("text-anchor", "end")
.style("fill", color);
legend.append("text")
//.attr("x", width - 24)
.attr("x", function(d,i){return (width +(140*i))})
.attr("y", 9)
.attr("dy", ".35em")
//.style("text-anchor", "end")
.text(function(d) { return d; });
这是我能做的最好的,但我觉得我只是在猜测,也许我会重温,但与此同时,如果有人能向我漂亮地解释它,我将不胜感激
var legendHolder = svg.append('g')
// translate the holder to the right side of the graph
.attr('transform', "translate(" + (-width) + "," + (-margin.top) + ")")
.attr('class','legendHolder')
var legend = legendHolder.selectAll(".legend")
.data(ageNames.slice().reverse())
.enter().append("g")
.attr("class", "legend")
.attr('transform', function(d, i) { return "translate(" + -40*i + "," + 0 + ")"; })
.attr("width", 36)
legend.append("rect")
.attr("x", function(d,i){return (width +(150*i))})
.attr("width", 18)
.attr("height", 18)
//.style("text-anchor", "end") //"startOffset"="100%
//.style("startOffset","100%") //"startOffset"="100%
.style("fill", color);
legend.append("text")
//.attr("x", width - 24)
.attr("x", function(d,i){return (width +(150*i)+20)})
.attr("y", 9)
.attr("dy", ".35em")
//.style("text-anchor", "end")
.text(function(d) { return d; });
最佳答案
如果你想让图例位于图表之外,你只需要增加你想要放置它的边距的大小,并将它翻译成位置。
现在您根据 <svg>
的大小定位图例的各个部分.您可以通过创建 <g>
来简化此操作包含所有图例元素并将其转换到图表中所需的位置。
您需要尝试使用这些值来获得您想要的内容,但以下是允许您将图例放在右边距的值。
var margin = {top: 20, right: 100, bottom: 30, left: 40};
var legendHolder = svg.append('g')
// translate the holder to the right side of the graph
.attr('transform', "translate(" + (margin.left + width) + ",0)")
var legend = legendHolder.selectAll(".legend")
.data(ageNames.slice().reverse())
.enter().append("g")
.attr("class", "legend")
.attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });
legend.append("rect")
.attr("x", 0)
.attr("width", 18)
.attr("height", 18)
.style("fill", color);
legend.append("text")
.attr("x", 0)
.attr("y", 9)
.attr("dy", ".35em")
.style("text-anchor", "end")
.text(function(d) { return d; });
关于javascript - 如何在 d3 图表中定位图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41090920/
我是一名优秀的程序员,十分优秀!