2017-11-14 7 views
0

私が進めているプロジェクトでは、JavaFXで継続的に更新される両面棒グラフ(または両面ヒストグラム)としてデータを表示したいと考えています。私はバーが軸の一方の側からだけ伸びていて、両側から伸びていない水平の棒グラフを作りました。JavaFXの両面棒グラフ

私がしたいことの例は、各行(またはバー)は店を表し、左側は現在の女性の割合を表し、右の割合は現在の男性を表します。顧客が店舗に出入りすると、このチャートは現在の性別のパーセンテージを表示するように更新され、顧客がいない限り、常に100%になります。この場合、バーはありません。つまり、顧客がいない限り、バーは常に同じ長さになり、ちょうど両側に移動します。全体のチャートにはおそらく5つの異なる店舗があるので、ジェンダー表現を持つ5つの異なるバーがあります。

画像を投稿するには十分な評判がないので、ここには私がそれを見せたいものが linkです。

これは私が現在作成できるように見えるlinkです。

ありがとうございました!

答えて

0

元は、両面の棒グラフをグラフ化するために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); 
} 
}