Android-GraphView показывает неправильные графики с setNumVerticalLabels
Я тестирую библиотеку android-graphview и нахожу такое поведение: я использую последнюю версию GraphViewDemos и первый пример SimpleGraph. Он показывает линейный график с правильными данными. (Значения по оси Y 1,2,3)
GraphViewSeries exampleSeries = new GraphViewSeries(new GraphViewData[] {
new GraphViewData(1, 2.0d)
, new GraphViewData(2, 1.5d)
, new GraphViewData(2.5, 3.0d) // another frequency
, new GraphViewData(3, 2.5d)
, new GraphViewData(4, 1.0d)
, new GraphViewData(5, 3.0d)
});
Максимальное значение равно трем (извините, я не могу опубликовать изображение), а все остальные координаты верны.
Если я добавлю эти строки
graphView.getGraphViewStyle().setNumVerticalLabels(5);
graphView.setVerticalLabels( new String[]{"4","3","2","1","0"});
до
LinearLayout layout = (LinearLayout) findViewById(R.id.graph1);
layout.addView(graphView);
в коде для изменения оси Y я получаю график, где максимальное значение не равно трем, а четырем. А все остальные координаты неверны в значениях y.
Почему меняется весь график, а не только ось Y?
2 ответа
С линией:
graphView.setVerticalLabels( new String[]{"4","3","2","1","0"});
Вы устанавливаете статические метки на график. Таким образом, вертикальные метки (значения y) больше не связаны с данными.
Эта строка для динамических меток. Вы можете изменить количество меток, которые будут сгенерированы.
graphView.getGraphViewStyle().setNumVerticalLabels(5);
Но вы используете статические метки, поэтому строка не имеет смысла.
Посетите эту страницу и перейдите к части учебника, посвященной пользовательскому форматированию меток.
GraphView graphView = new LineGraphView(this, "example");
graphView.setCustomLabelFormatter(new CustomLabelFormatter() {
@Override
public String formatLabel(double value, boolean isValueX) {
if (isValueX) {
if (value < 5) {
return "small";
} else if (value < 15) {
return "middle";
} else {
return "big";
}
}
return null; // let graphview generate Y-axis label for us
}
});
По сути, вам придется сопоставить фактическое значение y с предоставленной вами статической вертикальной меткой.