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);

Но вы используете статические метки, поэтому строка не имеет смысла.

http://android-graphview.org/

Посетите эту страницу и перейдите к части учебника, посвященной пользовательскому форматированию меток.

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 с предоставленной вами статической вертикальной меткой.

Другие вопросы по тегам