2014-10-09 49 views
1

我有一堆類StackedAreaChart和setLowerBound的問題。 當我設置autoRangingProperty爲真,一切都OK了JavaFX - StackedAreaChart和方法setLowerBound

http://i62.tinypic.com/2q0n3ht.png

但是,當我關掉自動量程,並設置一些PARAMS我哈瓦一些錯誤..

http://i62.tinypic.com/2hdcn6p.png

import java.util.Random; 

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.chart.NumberAxis; 
import javafx.scene.chart.StackedAreaChart; 
import javafx.scene.chart.XYChart; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class TestStackedAreaChart extends Application { 

    StackPane mainGraphStackPane = null; 
    BorderPane pane; 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) { 
     ///
     Random generator = new Random(); 

     XYChart.Series<Number, Number> series1 = new XYChart.Series<>(); // line 
     XYChart.Series<Number, Number> series2 = new XYChart.Series<>(); // down 
     XYChart.Series<Number, Number> series3 = new XYChart.Series<>(); // up 
     for (int i = 1; i < 50; i++) { 
      Double value = generator.nextDouble() + 1; 
      series1.getData().add(new XYChart.Data<Number, Number>(i, value)); 
      Double Ymin = value - generator.nextDouble() * 0.2; 
      series2.getData().add(new XYChart.Data<Number, Number>(i, Ymin)); 
      Double Ymax = (value - Ymin) + generator.nextDouble() * 0.2; 
      series3.getData().add(new XYChart.Data<Number, Number>(i, Ymax)); 

     } 
     ///

     final NumberAxis xAxisLC = new NumberAxis(); 
     final NumberAxis yAxisLC = new NumberAxis(); 
     /////////what's wrong 
     yAxisLC.autoRangingProperty().set(false); 
     yAxisLC.setMinorTickLength(yAxisLC.getTickLength()); 
     yAxisLC.setMinorTickCount(0); 
     yAxisLC.setUpperBound(2.5); 
     yAxisLC.setLowerBound(1.0); //when I set 0.0 is OK 
     yAxisLC.setTickUnit(0.2); 
     /////// 
     pane = new BorderPane(); 
     mainGraphStackPane = new StackPane(); 
     mainGraphStackPane.getChildren().add(pane); 

     StackedAreaChart<Number, Number> areaChart = new StackedAreaChart<Number, Number>(
       xAxisLC, yAxisLC); 
     areaChart.setCreateSymbols(false); 
     areaChart.setAlternativeRowFillVisible(false); 
     areaChart.setAnimated(false); 
     areaChart.setLegendVisible(false); 
     areaChart.getData().add(series2); 
     areaChart.getData().add(series3); 

     Scene scene = new Scene(mainGraphStackPane); 
     mainGraphStackPane.getChildren().add(areaChart); 
     mainGraphStackPane.getStylesheets().add("chart.css"); 
     stage.setScene(scene); 
     Group root = new Group(); 
     pane.getChildren().add(root); 
     stage.show(); 
     stage.setWidth(stage.getWidth() + 1); 
     stage.setHeight(stage.getHeight() + 1); 

    } 
} 

和CSS文件

@CHARSET "UTF-8"; 
.default-color0.chart-area-symbol { -fx-background-color: #e9967a, #ffa07a; } 
.default-color1.chart-area-symbol { -fx-background-color: #e9967a, #ffa07a; } 

.default-color0.chart-series-area-line { -fx-stroke: #ffaa00; } 
.default-color1.chart-series-area-line { -fx-stroke: #ffaa00; } 

.default-color0.chart-series-area-fill { -fx-fill: #ffff0055; } 
.default-color1.chart-series-area-fill { -fx-fill: #ffaa005 

誰有想法來解決它。

回答

0

我與StackedAreaChart有類似的問題,我不得不有效地偏移所有的值之前,將它們添加到圖表,以便圖表實際上開始在零,然後調整y軸標籤是正確的。

  1. setAutoRanging(false);
  2. setForceZeroInRange(false);
  3. 工作,你就可以添加到圖形,存儲的最大和最小的值的範圍。
  4. 添加所有減去最小值的值。
  5. setLowerBound(0);
  6. setUpperBound(...);最大值減去最小值。
  7. setTickLabelFormatter在y軸上,並在StringConverter<Number>toString方法將您的最小值添加到格式化之前的值。

例如您的數據負載範圍爲3到10.您將它們添加到圖形中,範圍爲0到7.並且y軸標籤爲0將調整爲3,1調整爲4等。

我的圖很複雜,但如果我有時間簡化它,我會發布一些示例代碼,但上面的代碼應該足以繼續。

相關問題