2017-11-14 12 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); 
} 
}