【问题标题】:Double sided bar chart in JavaFXJavaFX中的双面条形图
【发布时间】:2017-11-14 21:20:51
【问题描述】:

对于我正在进行的项目,我想在 JavaFX 中将数据显示为不断更新的双面条形图(或双面直方图)。我已经成功创建了一个水平条形图,其中条形仅从轴的一侧延伸,而不是从两侧延伸。

我想要做的一个例子是,在图表上,每一行(或条形)代表一家商店,左侧代表当前女性的百分比,右侧代表当前男性的百分比。当顾客进出商店时,此图表会更新以显示当前的性别百分比,除非没有顾客,否则它总是加起来为 100%。在这种情况下,没有酒吧。这意味着,除非没有顾客,酒吧的长度总是相同的,只是移到两边。整个图表可能显示了 5 家不同的商店,因此有 5 个不同的条形表示性别。

我没有足够的声誉来发布图片,所以这里是 link,我希望它看起来像。

这是一个link,看起来像我目前能做的。

谢谢!

【问题讨论】:

    标签: java javafx charts analytics graphing


    【解决方案1】:

    最初我尝试使用 BarChart 对象来绘制双面条形图,但在查看 this question 之后,我意识到 StackedBarChart 具有我想要的东西。这是我用来为其他想知道如何执行此操作的人创建双面直方图/条形图的代码:

        import java.util.Arrays;
        import javafx.application.Application;
        import javafx.collections.FXCollections;
        import javafx.scene.Scene;
        import javafx.scene.chart.CategoryAxis;
        import javafx.scene.chart.NumberAxis;
        import javafx.scene.chart.StackedBarChart;
        import javafx.scene.chart.XYChart;
        import javafx.stage.Stage;
    
        public class HorizontalHistogramTest extends Application{
    
    
            final static String austria = "Austria";
            final static String brazil = "Brazil";
            final static String france = "France";
            final static String italy = "Italy";
            final static String usa = "USA";
            final CategoryAxis xAxis = new CategoryAxis();
            final NumberAxis yAxis = new NumberAxis();
            final StackedBarChart<Number, String> sbc =
            new StackedBarChart<Number,String>(yAxis, xAxis);
            final XYChart.Series<Number,String> series1 =
            new XYChart.Series<Number,String>();
    
    @Override
    public void start(Stage stage) {
        stage.setTitle("Bar Chart Sample");
        sbc.setTitle("Country Summary");
        xAxis.setLabel("Country");
        xAxis.setCategories(FXCollections.<String>observableArrayList(
                Arrays.asList(austria, brazil, france, italy, usa)));
        yAxis.setLabel("Percent");
        // plus value
        series1.getData().add(new XYChart.Data<Number,String>(10, austria));
        series1.getData().add(new XYChart.Data<Number,String>(50, brazil));
        series1.getData().add(new XYChart.Data<Number,String>(40, france));
        series1.getData().add(new XYChart.Data<Number,String>(50, italy));
        series1.getData().add(new XYChart.Data<Number,String>(60, usa));
        // minus value
        series1.getData().add(new XYChart.Data<Number,String>(-90, austria));
        series1.getData().add(new XYChart.Data<Number,String>(-50, brazil));
        series1.getData().add(new XYChart.Data<Number,String>(-60, france));
        series1.getData().add(new XYChart.Data<Number,String>(-50, italy));
        series1.getData().add(new XYChart.Data<Number,String>(-40, usa));
    
        Scene scene = new Scene(sbc, 800, 600);
        sbc.getData().addAll(series1);
        stage.setScene(scene);
        stage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 2022-01-24
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多