I am showing a stacked bar chart with Flex, and I am dynamically开发者_如何学Go changing the data of the dataprovider.
However, the minimum and maximum for the y-axis do not get reset with the new data. So if one dataset had a value of -100,000, but the next dataset has only positive values, the y-axis still starts at -100,000.
How can I force the chart to redraw. I tried myChart.validateNow(), dataprovider.refresh(), etc.
<mx:ColumnChart id="myChart"
dataProvider="{_arrCol_chartData}"
columnWidthRatio="0.8"
type="stacked"
width="100%"
height="100%">
<mx:annotationElements>
<mx:CartesianDataCanvas id="canvas"
includeInRanges="true"/>
</mx:annotationElements>
<mx:horizontalAxis>
<mx:CategoryAxis dataProvider="{_arrCol_chartData}"
categoryField="Month"
id="a1"/>
</mx:horizontalAxis>
<mx:verticalAxisRenderers>
<mx:AxisRenderer axis="{a1}"
tickPlacement="none"
showLabels="false"
showLine="false"/>
</mx:verticalAxisRenderers>
<mx:series>
<mx:ColumnSeries yField="invisible"
displayName="invisible"
showDataEffect="slideIn"
hideDataEffect="slideOut">
<mx:fill>
<!--Set alpha to 0 to hide invisible column.-->
<mx:SolidColor color="0xFFFFFF"
alpha="0"/>
</mx:fill>
</mx:ColumnSeries>
<mx:ColumnSeries yField="freeCashflow"
styleName="standardSeries"
labelFunction="setCurrencyLabel">
<mx:fill>
<mx:SolidColor color="0xCCCCCC"
alpha="1"/>
</mx:fill>
</mx:ColumnSeries>
<mx:ColumnSeries yField="invisibleTop"
displayName="invisible"
showDataEffect="slideIn"
hideDataEffect="slideOut">
<mx:fill>
<!--Set alpha to 0 to hide invisible column.-->
<mx:SolidColor color="0xFFFFFF"
alpha="0"/>
</mx:fill>
</mx:ColumnSeries>
<mx:ColumnSeries yField="bottom"
styleName="standardSeries"
labelFunction="setCurrencyLabel">
<mx:fill>
<mx:SolidColor color="0x1B95D5"
alpha="1"/>
</mx:fill>
</mx:ColumnSeries>
<mx:ColumnSeries yField="top"
id="topColumn"
styleName="standardSeries"
labelFunction="setCurrencyLabel">
<mx:fill>
<mx:SolidColor color="0x00FF00"
alpha="1"/>
</mx:fill>
</mx:ColumnSeries>
</mx:series>
</mx:ColumnChart>
[Bindable]
private var _arrCol_chartData : ArrayCollection = new ArrayCollection([
{ ID: FREE_CASHFLOW, Month: "Free Cashflow", freeCashflow: 0, invisible: 0, invisibleTop: 5000 },
{ ID: CAPITAL_RESERVES, Month: "Capital Reserves", bottom: 0, invisible: 0 },
{ ID: REINVESTMENT_MONEY, Month: "Reinvestment Money", bottom: 0, invisible: 0 },
{ ID: PROFIT_SHARING, Month: "Profit Sharing", bottom: 0, invisible: 0 },
{ ID: DISTRIBUTABLE, Month: "Distributable", top: 0, invisible: 0 }]);
function changeDate() : void {
_arrCol_chartData.getItemAt( 0 ).bottom = 1000;
_arrCol_chartData.refresh();
}
Thx, Martin
This should do the job. `
a1.maximum = NaN;
a1.minimum = NaN; // or 0 if you want it based at zero{
`
edit:
I changed the code to look like this:
<mx:horizontalAxis>
<mx:CategoryAxis dataProvider="{_arrCol_chartData}"
categoryField="Month"
id="a1"/>
</mx:horizontalAxis>
<mx:horizontalAxisRenderers>
<mx:AxisRenderer axis="{a1}"
tickPlacement="none"
showLabels="true"
showLine="false"/>
</mx:horizontalAxisRenderers>
and the linear axis updated perfectly.
This is a known Bug in Flex Charting when using "stacked" setting.
https://bugs.adobe.com/jira/browse/FLEXDMV-1674
Try adding the chart to the module or application dynamically in actionscript. This would remove it from memory and ensure that the axis is reset.
精彩评论