我正在使用awsome MPandroidChart开源库,我正在从我在线接收的数据中实时填充图表,当使用新值填充图表时,我只允许显示特定数量的x索引,使用“setVisibleXRange()”和“moveViewToX()”将图表滑动到屏幕左侧,一次只显示最后一个条目。
这一切都很好但我希望实现一种情况,其中视口被修改以完全适合最高和最低可见值,与“fitScreen()”相同,但仅修改Y轴。 “zoomOut()”和“zoomIn()”使用相对输入,与“zoom()”相同 所以我不能根据我的数据使用它们。 我需要的是一种在Y轴上定位视图的方法,使其在每个周期适合不同的范围,例如:2到15或-98到34等等。
有没有人对如何做到这一点有任何想法? 感谢所有答案。 @PhillJay
答案 0 :(得分:1)
也许这个答案并不完美,但是 Yaxis 可以适合屏幕:
chart.getAxisLeft().setLabelCount(10, true);
chart.fitScreen();
答案 1 :(得分:0)
它有些旧,但可能与之相关的答案与轴无关。您需要的是修改视口:
private void autoScaleLineChart(@NonNull LineChart lineChart) {
if (lineChart.getLineData() == null) return;
float lowestVisibleX = lineChart.getLowestVisibleX();
float highestVisibleX = lineChart.getHighestVisibleX();
LineData chartData = lineChart.getLineData();
chartData.calcMinMaxY(lowestVisibleX, highestVisibleX);
//calculating offsets for axes to display correct labels
lineChart.getXAxis().calculate(chartData.getXMin(), chartData.getXMax());
calculateMinMaxForYAxis(lineChart, YAxis.AxisDependency.LEFT);
calculateMinMaxForYAxis(lineChart, YAxis.AxisDependency.RIGHT);
//this is where the magic happens
lineChart.calculateOffsets();
//if nothing happens try adding
//lineChart.invalidate();
}
private void calculateMinMaxForYAxis(@NonNull LineChart lineChart, @NonNull YAxis.AxisDependency axisDependency) {
LineData chartData = lineChart.getLineData();
YAxis yAxis = lineChart.getAxis(axisDependency);
if (yAxis.isEnabled()) {
float yMin = chartData.getYMin(axisDependency);
float yMax = chartData.getYMax(axisDependency);
yAxis.calculate(yMin, yMax);
}
}
另外阅读以下内容可能会有所帮助:https://github.com/PhilJay/MPAndroidChart/wiki/Modifying-the-Viewport
答案 2 :(得分:-1)
我建议你阅读documentation of the YAxis。
专注于以下方法:
setStartAtZero(...)
setAxisMaxValue(...)
& setAxisMinValue(...)
setSpaceTop(...)
setSpaceBottom(...)
对于其中一些,您应该能够完全根据需要限制轴的可见区域。