admin管理员组文章数量:1326278
I am currently trying to use nvd3 to build a bar graph, and so far the discrete bar graph has everything I need. However, I am struggling with trying to add a legend to it like the other graphs have. I've already made the similiar changes to add a legend inside of the discreteBarGraph.js file, but it's apparent i'm missing something. Does anyone have any experience with this? Thanks.
I am currently trying to use nvd3 to build a bar graph, and so far the discrete bar graph has everything I need. However, I am struggling with trying to add a legend to it like the other graphs have. I've already made the similiar changes to add a legend inside of the discreteBarGraph.js file, but it's apparent i'm missing something. Does anyone have any experience with this? Thanks.
Share Improve this question asked Jan 22, 2014 at 1:41 DiamonWDiamonW 2592 gold badges6 silver badges12 bronze badges 1- can you post the relevant code or provide an example (fiddle etc) – user1614080 Commented Jan 22, 2014 at 2:26
1 Answer
Reset to default 8The discrete bar chart may not have a legend built in, but the NVD3 default legend is itself a built-in function that you can call just like the NVD3 chart functions.
The only plicated part is setting the data you want to show in the legend. In the other graphs, the legend shows the series name; but for the discrete bar chart there is only one series. I'm assuming you want to show the labels associated with each bar, possibly as an alternative to showing them on the x-axis.
To make that happen, you have to make sure that the data array associated with the selection that calls the legend function is the array of bar values and names, not the top-most array of data series (which in the discrete bar chart is a length-one array containing the single series object.) You then tell the legend function how to access the appropriate label from each bar's data object using the key(function(d){})
method.
Here's an adaptation of the NVD3 discrete bar example with those changes:
nv.addGraph(function() {
var chart = nv.models.discreteBarChart()
.x(function(d) { return d.label })
.y(function(d) { return d.value })
.tooltips(false)
.showValues(true)
.margin({top:50})//leave room for legend
chart.xAxis.tickFormat("") //don't show bar labels on axis
.axisLabel("Sector"); //show an axis title instead
//store svg selection in a variable so it can be re-used:
var svg = d3.select('#chart svg')
.datum(data);
//make the chart:
svg.transition().duration(500)
.call(chart);
var makeLegend = nv.models.legend()
//initialize legend function
.key(function(d) { return d.label; });
//tell the function which property to use as text
svg.append("g").attr("class", "legend")
//add a group to hold legend, position as necessary
//(no positioning will draw legend across top of SVG)
.datum(data[0].values)
//set data to the array of objects you want
//included in the legend
.transition().duration(500)
.call(makeLegend); //make it so
nv.utils.windowResize(chart.update);
nv.utils.windowResize(makeLegend); //doesn't seem to make much difference, but...
return chart;
});
If you are updating your data in any way that affects the legend, remember you'll need to update the legend as well as the main chart.
本文标签: javascriptHow to add a legend to a discrete bar graph in nvd3Stack Overflow
版权声明:本文标题:javascript - How to add a legend to a discrete bar graph in nvd3? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742213160a2434086.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论