Отображать одинаковые значения в BarChart - PullRequest
0 голосов
/ 29 ноября 2018

Проблема в том, что при заполнении моего столбца (любого из них) списком идентичные значения отображаются друг над другом и отображаются как единое целое.Мне потребовалось некоторое время, чтобы понять это.Теперь я создаю хакерский обходной путь, просто ища дубликаты и добавляя к ним "".Но если вы отображаете список с более чем 100 записями, и все они состоят из однозначных чисел, вы обязаны иметь до 9 пробелов за каждым числом, например, и это делает форматирование всего этого действительно сложным.Поэтому мой вопрос: есть ли какой-нибудь способ проинструктировать диаграмму для их отдельного рисования или, если ее нет, есть лучший обходной путь, чем мой?

    public void updateChart(boolean originalChart, ArrayList<SortingEntry> entries){
    Platform.runLater(() -> {
        ArrayList<SortingEntry> list = Functions.checkForDoubles(entries);
        if(originalChart){
            inputSeries = new XYChart.Series();
            for(SortingEntry entry:list){
                XYChart.Data chartData = new XYChart.Data(entry.getValue(), entry.getValAsLong());
                inputSeries.getData().add(chartData);
            }
            input.getData().clear();
            input.getData().add(inputSeries);
        } else {
            resultSeries = new XYChart.Series();
            for(SortingEntry entry:list){
                XYChart.Data chartData = new XYChart.Data(entry.getValue(), entry.getValAsLong());
                resultSeries.getData().add(chartData);
            }
            result.getData().clear();
            result.getData().add(resultSeries);
        }
        System.out.println();
    });
}

checkForDoubles в функциях:

    public static ArrayList<SortingEntry> checkForDoubles(ArrayList<SortingEntry> list){
    ArrayList<String> doubles = new ArrayList<>();
    for(int i = 0; i < list.size(); i++){
        for(int j = 0; j < list.size(); j++){
            SortingEntry entry = list.get(i);
            if(entry.getValue().equals(list.get(j).getValue()) && !doubles.contains(entry.getValue()) && i != j){
                doubles.add(entry.getValue());
                list.remove(entry);
                entry.setValue(entry.getValue()+" ");
                list.add(entry);
                checkForDoubles(list);
            }
        }
    }
    return list;
}

1 Ответ

0 голосов
/ 29 ноября 2018

К сожалению, это определение диаграммы - для одного значения X (entry.getValue()) у вас есть одно значение Y.Если вас не интересуют значения X - просто используйте вместо этого индекс:

int i;
for(SortingEntry entry:list){
    XYChart.Data chartData = new XYChart.Data(i++, entry.getValAsLong());
    inputSeries.getData().add(chartData);
}

В противном случае вам нужно использовать трюки, подобные этому пробелу (Обратите внимание, что пробел нулевой ширины вutf) или напишите свою Axis реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...