Как настроить легенду с Graphview в Android Studio

У меня есть экран в моем приложении, на котором отображается следующий график:

введите здесь описание изображения

Есть ли способ изменить мою легенду, чтобы она могла сказать, что представляет каждый цвет? В настоящее время я могу отобразить синий квадрат, но он не представляет ни одного из чисел. Вот код, который я использую при создании графика:

GraphView graph = (GraphView) findViewById(R.id.graph);

        BarGraphSeries<DataPoint> series = new BarGraphSeries<DataPoint>(new DataPoint[]{
                new DataPoint(1, personal),
                new DataPoint(2, fun),
                new DataPoint(3, work),
                new DataPoint(4, food),
                new DataPoint(5, commute),
                new DataPoint(6,bills)
        });


        graph.setTitle("Expenses");
        graph.addSeries(series);
        graph.getLegendRenderer().setVisible(true);
        graph.getLegendRenderer().setAlign(LegendRenderer.LegendAlign.TOP);
        series.setValueDependentColor(new ValueDependentColor<DataPoint>() {
            @Override
            public int get(DataPoint data) {
                return Color.rgb((int) data.getX() * 255 / 4, (int) Math.abs(data.getY() * 255 / 6), 100);
            }
        });
        series.setSpacing(50);

        series.setDrawValuesOnTop(true);
        series.setValuesOnTopColor(Color.RED);

        backToMainMenu();
    }

person sam1319    schedule 09.04.2016    source источник


Ответы (2)


Я не думаю, что вам нужно настраивать легенду. Класс LegendRenderer использует заголовок каждой серии данных, чтобы показать, что представляют столбцы на диаграмме.

series.setTitle("This will display in the legend.");

Однако в этом примере у вас есть только одна серия данных. Если вы должны иметь метки в легенде для каждого столбца, я предлагаю добавить на диаграмму несколько рядов с разными заголовками. Каждая серия будет иметь свое название и цвет.

// Each series represents one bar.
BarGraphSeries<DataPoint> series1 = new BarGraphSeries<DataPoint>(new DataPoint[]{ new DataPoint(1, personal)});
BarGraphSeries<DataPoint> series2 = new BarGraphSeries<DataPoint>(new DataPoint[]{ new DataPoint(2, fun)});
BarGraphSeries<DataPoint> series3 = new BarGraphSeries<DataPoint>(new DataPoint[]{ new DataPoint(3, work)});
BarGraphSeries<DataPoint> series4 = new BarGraphSeries<DataPoint>(new DataPoint[]{ new DataPoint(4, food)});
BarGraphSeries<DataPoint> series5 = new BarGraphSeries<DataPoint>(new DataPoint[]{ new DataPoint(5, commute)});
BarGraphSeries<DataPoint> series6 = new BarGraphSeries<DataPoint>(new DataPoint[]{ new DataPoint(6, bills)});

// Add titles to be displayed in the legend.
series1.setTitle("personal");
series2.setTitle("fun");
series3.setTitle("work");
series4.setTitle("food");
series5.setTitle("commute");
series6.setTitle("bills");

// Add color to your bars.
series1.setColor(Color.rbg(1,2,3));
series2.setColor(Color.rbg(4,5,6));
series3.setColor(Color.rbg(7,8,9));
series4.setColor(Color.rbg(0,1,2));
series5.setColor(Color.rbg(3,4,5));
series6.setColor(Color.rbg(6,7,8));

// Add each series to your graph.
graph.addSeries(series1);
graph.addSeries(series2);
graph.addSeries(series3);
graph.addSeries(series4);
graph.addSeries(series5);
graph.addSeries(series6);

// Display the legend.
graph.getLegendRenderer().setVisible(true);
person user3188777    schedule 31.10.2017

вы можете использовать собственный рендерер легенды и расширить реализацию по умолчанию. https://github.com/jjoe64/GraphView/blob/master/src/main/java/com/jjoe64/graphview/LegendRenderer.java

Или вы отключаете легенду в графическом представлении, используете FrameLayout и накладываете на график свои собственные представления для своей легенды.

person appsthatmatter    schedule 22.07.2016