为什么删除条形,然后将条形重新添加到我的堆栈条形图中会更改条形的位置
Why does removing, then re-adding bars to my stack bar chart change the position of the bars?
在我的jsfiddle中,如果您单击图例中的Pending
按钮,它应该删除与该类别关联的条形图。 这有效,但是当我单击 Reset Legend
按钮(它为currateData
方法提供原始数据,以便Pending
条返回)时,它会加载旧的挂起数据。
我相信这与这种方法有关:
function redrawPlot() {
svg = d3.select('svg.chart')
.attr('width', width)
.attr('height', height);
svg.selectAll('g.xaxis')
.attr('transform', 'translate(0, ' + (height - margin.top - margin.bottom) + ')');
}
我无法删除此方法,因为我的代码比 jsfiddle 中显示的代码更复杂,这只是显示问题。 我还需要更新重绘方法中的宽度和高度,所以我不能只是删除它。
如何更改 redrawPlot() 方法,以便在我重新填充图表时不会在添加旧数据时弄乱柱线位置?
问题出在redrawPlot
函数上:
var svg;
function initPlot() {
svg = d3.select('#graphTest') // <-- `svg` is the appended `g`
.append('svg')
// ...
.append('g')
// ...
}
// ...
function redrawPlot() {
svg = d3.select('svg.chart') // <-- redefining `svg` to be `svg`
// ...
}
问题是您正在使用全局变量svg
并在 redrawPlot
中重新定义它。如果将svg
的定义保留为原始定义,则图形将根据需要进行更新。通过添加var
使svg
的第二个定义本地化到redrawPlot
解决了这个问题。
作为旁注,尽量坚持使用可重用的图表模式,避免使用全局变量。
演示
如果要重新定义svg
变量
免责声明/警告:这将导致代码无法维护,不推荐。
演示 2
相关文章:
- 用chart.js绘制条形图
- d3.js用按钮更新条形图工具提示
- 添加新数据时D3.JS条形图列偏移量
- Chart.js条形图:网格颜色和隐藏标签
- 在条形图中呈现数据AngularJS,如何制作一个好的多条形图
- Chart.js 2.1.2条形图动画问题
- 如何在Extjs5中更改条形图的标签
- d3.js条形图转换无法正常工作
- 从数组在d3中创建条形图时出现问题
- 条形图元素的HTML5 JavaScript锚点
- d3.js组条形图不起作用
- 图表.js:条形图点击事件
- 如何使用chartjs设置条形图中每个条形图的颜色
- Raphael.js条形图及教程
- 对d3堆叠条形图的数据进行排序
- D3 具有不同堆栈级别的堆积条形图
- 为什么删除条形,然后将条形重新添加到我的堆栈条形图中会更改条形的位置
- 是否有可能在dimple.js中为条形图上的堆栈赋予特定的颜色?
- 如何添加“额外堆栈”在条形图中使用dimple.js
- DC.js 和交叉筛选器堆栈条形图,具有筛选与未筛选