在BarChart中显示相同的值

时间:2018-11-29 06:19:17

标签: java javafx

问题是,当用列表填充我的条形图(任意一个)时,相同的值会相互绘制并显示为一个。花了我一段时间解决这个问题。现在,我通过简单地寻找重复项并在其中添加一个“”来构建一个变通的解决方法。但是,如果您要显示包含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 :(得分:1)

不幸的是,这是图表的定义-对于一个X值(entry.getValue()),您只有一个Y值。如果您不关心X值-只需使用index即可:

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

否则,您需要使用类似该技巧的技巧(注意,utf中有zero width space)或编写自己的Axis实现。