Javafx 2 JavaFx堆叠条形图问题

Javafx 2 JavaFx堆叠条形图问题,javafx-2,Javafx 2,我有一张图表,数据堆积在(-,+)Y轴上 有了JfreeChart,所有这些都会正确无误地显示在每个栏上,数据也不会丢失 但是,当使用javafx StackedBar图表时,当条形图系列具有(正和负)数据堆叠时,条形图损坏并丢失数据。 if(加值>0){ series.getData().add(新的XYChart.Data(xPoint,plusValue)); } 如果(最小值>0){ series.getData().add(新的XYChart.Data(xPoint,-minusV

我有一张图表,数据堆积在(-,+)Y轴上

  • 有了JfreeChart,所有这些都会正确无误地显示在每个栏上,数据也不会丢失

  • 但是,当使用javafx StackedBar图表时,当条形图系列具有(正和负)数据堆叠时,条形图损坏并丢失数据。

    if(加值>0){
    series.getData().add(新的XYChart.Data(xPoint,plusValue));
    }
    如果(最小值>0){
    series.getData().add(新的XYChart.Data(xPoint,-minusValue));
    }
    
更新:

- -“我更改序列值”

导入java.util.array;
导入javafx.application.application;
导入javafx.collections.FXCollections;
导入javafx.scene.scene;
导入javafx.scene.chart.CategoryAxis;
导入javafx.scene.chart.NumberAxis;
导入javafx.scene.chart.StackedBarChart;
导入javafx.scene.chart.XYChart;
导入javafx.stage.stage;
公共类StackedBarChartSample扩展应用程序{
最终静态字符串austria=“austria”;
最终静态字符串巴西=“巴西”;
最终静态字符串france=“france”;
最终静态字符串意大利=“意大利”;
最终静态字符串usa=“usa”;
最终CategoryAxis xAxis=新CategoryAxis();
最终数字axis yAxis=新数字axis();
最终堆叠条形图sbc=
新堆叠条形图(xAxis、yAxis);
最终XYChart.系列1=
新的XYChart.Series();
最终XYChart.系列2=
新的XYChart.Series();
最终XYChart.系列3=
新的XYChart.Series();
@凌驾
公众假期开始(阶段){
阶段。设置标题(“条形图样本”);
sbc.设置标题(“国家总结”);
xAxis.setLabel(“国家”);
xAxis.setCategories(FXCollections.observableArrayList(
asList(奥地利、巴西、法国、意大利、美国);
yAxis.setLabel(“值”);
系列1.集合名称(“2003”);
//附加值
series1.getData().add(新的XYChart.Data(奥地利,200));
series1.getData().add(新的XYChart.Data(巴西,300));
series1.getData().add(新的XYChart.Data(法国,400));
series1.getData().add(新的XYChart.Data(意大利,500));
series1.getData().add(新的XYChart.Data(usa,600));
//负值
series1.getData().add(新的XYChart.Data(austria,-200));
series1.getData().add(新的XYChart.Data(巴西,-300));
series1.getData().add(新的XYChart.Data(france,-400));
series1.getData().add(新的XYChart.Data(意大利,-500));
series1.getData().add(新的XYChart.Data(美国,-600));
序列2.集合名称(“2004”);
series2.getData().add(新的XYChart.Data(奥地利,200));
series2.getData().add(新的XYChart.Data(巴西,300));
series2.getData().add(新的XYChart.Data(法国,400));
series2.getData().add(新的XYChart.Data(意大利,500));
series2.getData().add(新的XYChart.Data(usa,600));
//负值
series2.getData().add(新的XYChart.Data(austria,-200));
series2.getData().add(新的XYChart.Data(巴西,-300));
series2.getData().add(新的XYChart.Data(france,-400));
series2.getData().add(新的XYChart.Data(意大利,-500));
series2.getData().add(新的XYChart.Data(美国,-600));
系列3.集合名称(“2005”);
series3.getData().add(新的XYChart.Data(奥地利,200));
series3.getData().add(新的XYChart.Data(巴西,300));
series3.getData().add(新的XYChart.Data(法国,400));
series3.getData().add(新的XYChart.Data(意大利,500));
series3.getData().add(新的XYChart.Data(usa,600));
//负值
series3.getData().add(新的XYChart.Data(austria,-200));
series3.getData().add(新的XYChart.Data(巴西,-300));
series3.getData().add(新的XYChart.Data(法国,-400));
series3.getData().add(新的XYChart.Data(意大利,-500));
series3.getData().add(新的XYChart.Data(美国,-600));
场景=新场景(sbc,800600);
sbc.getData().addAll(系列1、系列2、系列3);
舞台场景;
stage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}

  • 没有负值。
  • 负值数据已损坏。
    • 使用


      我在StackedBarChart代码中发现了错误:

          private Map<Series, Map<String,Data<X, Y>>> seriesCategoryMap = new HashMap<Series, Map<String, Data<X, Y>>>();
      
    • 但是我们需要seriesCategoryMap中的每个系列都有categoryMap,但是该映射必须有
      ,以便每个categoryPoint都是List

    • 结论:对于每个系列,我们都有categoryMap,对于该categoryMap中的每个categoryPoint,我们都有
      列表条列表,列表条列表有正负条

    • 这样代码行就变成了

      private Map<Series, Map<String, List<Data<X, Y>>>> seriesCategoryMap = new HashMap<Series, Map<String, List<Data<X, Y>>>>();
      
      private Map seriesCategoryMap=new HashMap();
      
    • 之后,我们必须根据数据结构更新代码

    1-更新“dataItemAdded&seriesAdded”方法。

            // list to hold more that one bar "positive and negative"
        List<Data<X, Y>> itemList = categoryMap.get(category) != null ? categoryMap.get(category) : new ArrayList<Data<X, Y>>();
        itemList.add(item);
        categoryMap.put(category, itemList); 
    
        private List<Data<X, Y>> getDataItem(Series<X, Y> series, int seriesIndex, int itemIndex, String category) {
        Map<String, List<Data<X, Y>>> catmap = seriesCategoryMap.get(series);
        return catmap != null ? catmap.get(category) != null ? catmap.get(category) : new ArrayList<Data<X, Y>>() : new ArrayList<Data<X, Y>>();
    }
    
    //列表可容纳多个“正负”条
    List itemList=categoryMap.get(category)!=无效的get(category):新建ArrayList();
    项目列表。添加(项目);
    类别映射放置(类别、项目列表);
    
    2-getDataItem方法。

            // list to hold more that one bar "positive and negative"
        List<Data<X, Y>> itemList = categoryMap.get(category) != null ? categoryMap.get(category) : new ArrayList<Data<X, Y>>();
        itemList.add(item);
        categoryMap.put(category, itemList); 
    
        private List<Data<X, Y>> getDataItem(Series<X, Y> series, int seriesIndex, int itemIndex, String category) {
        Map<String, List<Data<X, Y>>> catmap = seriesCategoryMap.get(series);
        return catmap != null ? catmap.get(category) != null ? catmap.get(category) : new ArrayList<Data<X, Y>>() : new ArrayList<Data<X, Y>>();
    }
    
    private List getDataItem(系列、int系列索引、int项目索引、字符串类别){
    Map catmap=seriesCategoryMap.get(series);
    返回catmap!=null?catmap.get(category)!=null?catmap.get(category):新建ArrayList():新建ArrayList();
    }
    
    3-updateAxisRange和layoutPlotChildren更新这两种方法,以管理正负轴上的条形长度。

            // list to hold more that one bar "positive and negative"
        List<Data<X, Y>> itemList = categoryMap.get(category) != null ? categoryMap.get(category) : new ArrayList<Data<X, Y>>();
        itemList.add(item);
        categoryMap.put(category, itemList); 
    
        private List<Data<X, Y>> getDataItem(Series<X, Y> series, int seriesIndex, int itemIndex, String category) {
        Map<String, List<Data<X, Y>>> catmap = seriesCategoryMap.get(series);
        return catmap != null ? catmap.get(category) != null ? catmap.get(category) : new ArrayList<Data<X, Y>>() : new ArrayList<Data<X, Y>>();
    }
    
    • 堆叠条形图完美显示条形图,无任何数据损坏


    您使用哪个版本的JFX?@Alexander Kirov java version“1.7.0_11”您能在jira中提交一个关于JavaFX控件组件的问题吗?我已经检查过了,似乎还没有这样的问题。您必须添加一段代码和相应的数据。如果你不能-我需要你的代码和数据,来归档issue@AlexanderKirov java版本“1.7.0_