Highcharts - 使用 setSize 向下钻取会导致图表损坏
Highcharts - Drilldown with setSize causes chart corruption
当我向下钻取数据时,我需要能够调整图表的大小,因为例如,我的顶层可能只有 3 个系列,而我的向下钻取可能是 10 个系列,反之亦然.但是,我对此有疑问。
使用这个 fiddle 我能够重现错误:http://jsfiddle.net/gh/get/jquery/1.9.1/highslide-software/highcharts.com/tree/master/samples/highcharts/demo/column-drilldown/
type: 'bar',
events: {
drilldown: function(e) {
this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150 );
},
drillup: function(e) {
this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150 );
}
}
},
注意:如果向下钻取到 Internet Explorer,底部会显示 "Proprietary or Undetectable",这是顶层 "Brands" 图表遗留下来的。
如果我删除 this.setSize 内容,图表将正常工作。
这是经过上述更改后的图表。
不知道这是否是一个错误,但如果您调用 setSize 超时(即使 1 毫秒似乎也可以),您似乎可以解决它
drilldown: function(e) {
setTimeout(function () {
this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150 );
}, 1);
}
问题是在 drillDown 中重绘图表,在 setSize 中你尝试做同样的事情。解决办法是设置flag redraw (in setSize) as false.
drilldown: function(e) {
this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150,false );
},
drillup: function(e) {
this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150,false );
}
当我向下钻取数据时,我需要能够调整图表的大小,因为例如,我的顶层可能只有 3 个系列,而我的向下钻取可能是 10 个系列,反之亦然.但是,我对此有疑问。
使用这个 fiddle 我能够重现错误:http://jsfiddle.net/gh/get/jquery/1.9.1/highslide-software/highcharts.com/tree/master/samples/highcharts/demo/column-drilldown/
type: 'bar',
events: {
drilldown: function(e) {
this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150 );
},
drillup: function(e) {
this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150 );
}
}
},
注意:如果向下钻取到 Internet Explorer,底部会显示 "Proprietary or Undetectable",这是顶层 "Brands" 图表遗留下来的。
如果我删除 this.setSize 内容,图表将正常工作。
这是经过上述更改后的图表。
不知道这是否是一个错误,但如果您调用 setSize 超时(即使 1 毫秒似乎也可以),您似乎可以解决它
drilldown: function(e) {
setTimeout(function () {
this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150 );
}, 1);
}
问题是在 drillDown 中重绘图表,在 setSize 中你尝试做同样的事情。解决办法是设置flag redraw (in setSize) as false.
drilldown: function(e) {
this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150,false );
},
drillup: function(e) {
this.setSize( this.chartWidth, ( e.seriesOptions.data.length * 50 ) + 150,false );
}