Reputation: 39
I have data which changes from 750 000 - 1 000 000+- so I actually dont need to see value under 750 000.
If I just making y[i] - 750 000 so there's another problem (shows on AxisY min 0 and to 250 000+-)
How can i make this with BarChart
?
BarChart<String,Number> bc= new BarChart<String, Number>(xAxis,yAxis);//statistic-years
bc.setTitle("Statistic-Years");
xAxis.setLabel("Country");
yAxis.setLabel("Value");
int[] cityPopulation = {
857200, 866500,871100,880400,889600,891900, 889800, 882100, 873200, 864400, 854300, 844300, 831500, 818910,
816382, 814255,813159,811939,812990,812862, 812605, 814224, 814070, 815786, 816061, 815269, 814758, 813387};
int[] countryPopulation = {
1075400,1059100,1043300,1028000,1022300,1012900,999900,993100,987300,980200,974400,966700,959500,953461,937490,
921981, 906978, 889632, 873477, 859355, 847370, 836384,827131,818401,810977,802993,795815,788776,
};
XYChart.Series series1 = new XYChart.Series();
series1.setName("Country population");
XYChart.Series series2 = new XYChart.Series();
series2.setName("City population");
bc.setStyle("-fx-font-size: 14;-fx-font-weight: bolder;");
bc.setStyle("CHART_COLOR_1: rgb(2,0,94); " + "CHART_COLOR_2: rgb(189,0,18); ");
for (int i =0;i<cityPopulation.length;i++) {
series1.getData().add(new XYChart.Data(""+(i+1989),countryPopulation[i]));
series2.getData().add(new XYChart.Data(""+(i+1989),cityPopulation[i]));
}
bc.getData().add(series1);
bc.getData().add(series2);
Upvotes: 1
Views: 2846
Reputation: 21799
The axis has these boundaries because the default value of the autoRangingProperty
is true
and the default value of the forceZeroInRangeProperty
is also true
.
This means, that the axis will set its own boundaries automatically, while keeping the zero value always displayed, therefore the lower bound will be at least zero.
You can set the forceZeroInRangeProperty
to false which will lead to have automatic ranging, but as the zero value is not forced to be displayed, the boundaries will be calculated based on the minimum and maximum value on the data displayed.
yAxis.setForceZeroInRange(false);
Alternatively you can manually set the axis boundaries with:
Either using for example the appropiate constructor to set the lower and upper bound:
NumberAxis yAxis = new NumberAxis(700000, 1200000, 1000);
or by setting the autoRangingProperty
to false
and the lowerBoundProperty
and the upperBoundProperty
to the needed values:
NumberAxis yAxis = new NumberAxis();
yAxis.setAutoRanging(false);
yAxis.setLowerBound(700000);
yAxis.setUpperBound(1200000);
Example chart by setting forceZeroInRangeProperty
to false:
Upvotes: 3