Maximum value of Y-axis
elatoskinas opened this issue · 6 comments
Is it possible to get the current maximum value of the y-axis of a Chart without doing calculations on the data itself? For instance, taking the very first Line Chart example from the wiki:
https://github.com/pepstock-org/Charba/wiki/ChartLine
So the max value is y = 100 on the Y axis. Is it possible to get this number?
@lightingft if you need the max value of the axis, you should access to chart node, as following:
if (chart.isInitialized()){
// internal chart entities
ChartNode node = chart.getNode();
// gets scales
ScalesNode scales = node.getScales();
// gets sclaes map
Map<String,ScaleItem> scalesMap = scales.getItems();
// gets the Y axis
ScaleItem item = scalesMap.get(Scales.DEFAULT_Y_AXIS_ID);
// gets max
int max= item.getMax();
}
@lightingft be aware that the previous source code is providing you the MAX value of axis, NOT the max value of your data.
To have it, you could use Collections.max(Collection, Comparator)
.
@lightingft if you need the max value of the axis, you should access to chart node, as following:
if (chart.isInitialized()){ // internal chart entities ChartNode node = chart.getNode(); // gets scales ScalesNode scales = node.getScales(); // gets sclaes map Map<String,ScaleItem> scalesMap = scales.getItems(); // gets the Y axis ScaleItem item = scalesMap.get(Scales.DEFAULT_Y_AXIS_ID); // gets max int max= item.getMax(); }
Hmm, strangely the key that I had to use (without changing anything) for scalesMap had to be "y-axis-1" instead of the Default Y Axis ID ("y-axis-0").
Thank you for the answer!
Hmm, strangely the key that I had to use (without changing anything) for scalesMap had to be "y-axis-1" instead of the Default Y Axis ID ("y-axis-0").
I see that if you are using Scatter charts, CHART.JS is setting as default Axis id [x-axis-1, y-axis-1]
Nevertheless you can set ID of axis, using own linear axis instance, like this (tested with a scatter chart):
CartesianLinearAxis axis = new CartesianLinearAxis(chart);
axis.setDisplay(true);
axis.setId(Scales.DEFAULT_Y_AXIS_ID);
chart.getOptions().getScales().setYAxes(axis);
Hmm, strangely the key that I had to use (without changing anything) for scalesMap had to be "y-axis-1" instead of the Default Y Axis ID ("y-axis-0").
I see that if you are using Scatter charts, CHART.JS is setting as default Axis id
[x-axis-1, y-axis-1]
Nevertheless you can set ID of axis, using own linear axis instance, like this (tested with a scatter chart):CartesianLinearAxis axis = new CartesianLinearAxis(chart); axis.setDisplay(true); axis.setId(Scales.DEFAULT_Y_AXIS_ID); chart.getOptions().getScales().setYAxes(axis);
Ahh, I see. Thanks! That answers my problem.
@lightingft I was curious why the scatter charts are using y-axis-1 instead of 0.
I have seen that the default scales definitions (default set by CHART.JS) of Scatter chart have got x-axis-1 and y-axis-1 (only scatter chart has got this default).
In Charba you could see those defaults as following (that you can change them as well):
Defaults.get().getOptions(ChartType.SCATTER).getScales().getYAxes();