我对Class StackedAreaChart和setLowerBound有一些问题。 当我将autoRangingProperty设置为true时,一切正常
http://i62.tinypic.com/2q0n3ht.png
但是当我关闭autoRanging并设置一些参数时,我会遇到一些错误..
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 :(得分:1)
我在StackedAreaChart中遇到了类似的问题,在将它们添加到图表之前我必须有效地抵消所有值,以便图表实际上从零开始,然后将y轴标签调整为正确。
setAutoRanging(false);
setForceZeroInRange(false);
setLowerBound(0);
setUpperBound(...);
到最大值减去最小值。setTickLabelFormatter
,在StringConverter<Number>
toString
方法中,在格式化之前将最小值添加到该值。e.g。你有一个3到10范围内的数据加载。你将它们添加到图表中的范围是0到7.并且0的y轴标签将调整为3,1调整为4,等等。
我的图表非常复杂,但如果我有时间将其简化,我会发布一些示例代码,但上面的代码应该足够了。
答案 1 :(得分:0)
http://oi60.tinypic.com/21ah3b5.jpg
我想一想,我如何放大这张图表。 在Linechart类中工作正常:)