Неправильные цвета в столбчатой ​​диаграмме jFreeChart с подкатегориями

Я создал свое приложение на основе демонстрационной программы StackedBarChart4.java.

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

Задача состоит в том, как выполнить итерацию ряда, который используется в следующем утверждении:

    renderer.setSeriesPaint(int Series, P Paint);

Какая именно серия представлена ​​​​int? Кажется, он основан на элементах rowkey для одной категории. Но какой из них, поскольку все они могут иметь разные значения, некоторые из которых могут быть нулевыми.

Спасибо

Эллиот


person Elliot    schedule 06.05.2016    source источник
comment
Некоторые примеры приведены здесь.   -  person trashgod    schedule 08.05.2016


Ответы (1)


В руководстве для разработчиков jFree говорится, что каждая строка в наборе данных представляет собой серию. Каждый столбец представляет собой категорию. Я решил просто проверить все ключи, возвращаемые dataset.getRowKey() для одной категории или даты. Были ли связанные значения нулевыми или нет, не имеет значения.

В моем случае каждый ключ состоит из навыка и сотрудника в форме «навык (сотрудник)», и перебор клавиш строк позволяет мне найти правильные цветовые позиции в каждой из полос для разных сотрудников.

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

Должно быть, я делаю что-то правильно, раз это работает.

Вот код:

    Paint[] p = new Paint[emps.size()];
    .
    .
    .
    // need to do this for but all rows or series points whether they have a null value or not  
    for (int rowNdx = 0; rowNdx < dataset.getRowKeys().size(); rowNdx++) {

        //parse out the emp and use the emp hashtable to get the correct offset in the  color array
        String emp = getEmp(dataset.getRowKey(rowNdx).toString()); // will extract emp number from skill/emp rowkey e.g. "0550 (02195)"
        int foo = Integer.parseInt(empsHash.get(emp).toString());  // will get offset in emp arraylist for this employee number

        renderer.setSeriesPaint(rowKey, p[foo]);      // paint this series Pos is the series number and always start with position of the employee in the

        if (debug)System.out.print("\n");

    }       

Вот диаграмма, которую он выдает. В легенде указаны цвета для разных сотрудников, которые работали над навыком в каждую дату.

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

person Elliot    schedule 09.05.2016