StackedAreaChart 在后续数据重新填充时使用 8 种颜色后的默认着色策略
StackedAreaChart's default coloring policy after 8 colors on subsequent data repopulations
我正在尝试了解 StackedAreaChart
如何为其系列着色,以便在数据被全新数据替换时在我的应用程序中为系列着色。最初,我认为 StackedAreaChart
循环使用 8 种默认颜色。换句话说,数据系列根据 getData()
、mod 中的索引进行着色 8。但我遇到了意外行为:
上面的输出来自下面的应用程序,它会在每次单击 window 时清除 StackedAreaChart
的数据并用 10 个新系列重新填充它。如您所见,只有前 8 种颜色在 clicks/repopulations.
中是一致的
public class TestChartColors extends Application {
private int clickCount = 0;
@Override
public void start(Stage primaryStage) {
NumberAxis xAxis = new NumberAxis(0, 10, 1);
NumberAxis yAxis = new NumberAxis(0, 10, 1);
final StackedAreaChart<Number,Number> chart = new StackedAreaChart<>(xAxis,yAxis);
chart.setLegendVisible(false);
chart.setCreateSymbols(false);
chart.setAnimated(false);
chart.setOnMouseClicked((MouseEvent event) -> {
clickCount++;
chart.getData().clear();
for(int i=0; i<10; i++){
chart.getData().add(flatSeries());
}
primaryStage.setTitle("After " + clickCount + " clicks.");
});
StackPane root = new StackPane();
root.getChildren().add(chart);
Scene scene = new Scene(root, 300, 250);
primaryStage.setScene(scene);
primaryStage.setTitle("Click the window.");
primaryStage.show();
}
private Series<Number,Number> flatSeries(){
Series<Number,Number> s = new Series<>();
ObservableList<XYChart.Data<Number, Number>> d = s.getData();
d.add(new XYChart.Data<>(0, 1));
d.add(new XYChart.Data<>(10, 1));
return s;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
找到解决方法:
插入
while(chart.getData().size() % 8 != 0){
final XYChart.Series<Number,Number> series = new XYChart.Series<>();
series.getData().add(new XYChart.Data<>(0,0));
chart.getData().add(series);
}
在 chart.getData().clear();
.
之前
StackedAreaChart 似乎在它停止的地方继续编号,但奇怪的是,前 8 种颜色除外。
我正在尝试了解 StackedAreaChart
如何为其系列着色,以便在数据被全新数据替换时在我的应用程序中为系列着色。最初,我认为 StackedAreaChart
循环使用 8 种默认颜色。换句话说,数据系列根据 getData()
、mod 中的索引进行着色 8。但我遇到了意外行为:
上面的输出来自下面的应用程序,它会在每次单击 window 时清除 StackedAreaChart
的数据并用 10 个新系列重新填充它。如您所见,只有前 8 种颜色在 clicks/repopulations.
public class TestChartColors extends Application {
private int clickCount = 0;
@Override
public void start(Stage primaryStage) {
NumberAxis xAxis = new NumberAxis(0, 10, 1);
NumberAxis yAxis = new NumberAxis(0, 10, 1);
final StackedAreaChart<Number,Number> chart = new StackedAreaChart<>(xAxis,yAxis);
chart.setLegendVisible(false);
chart.setCreateSymbols(false);
chart.setAnimated(false);
chart.setOnMouseClicked((MouseEvent event) -> {
clickCount++;
chart.getData().clear();
for(int i=0; i<10; i++){
chart.getData().add(flatSeries());
}
primaryStage.setTitle("After " + clickCount + " clicks.");
});
StackPane root = new StackPane();
root.getChildren().add(chart);
Scene scene = new Scene(root, 300, 250);
primaryStage.setScene(scene);
primaryStage.setTitle("Click the window.");
primaryStage.show();
}
private Series<Number,Number> flatSeries(){
Series<Number,Number> s = new Series<>();
ObservableList<XYChart.Data<Number, Number>> d = s.getData();
d.add(new XYChart.Data<>(0, 1));
d.add(new XYChart.Data<>(10, 1));
return s;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
找到解决方法:
插入
while(chart.getData().size() % 8 != 0){
final XYChart.Series<Number,Number> series = new XYChart.Series<>();
series.getData().add(new XYChart.Data<>(0,0));
chart.getData().add(series);
}
在 chart.getData().clear();
.
StackedAreaChart 似乎在它停止的地方继续编号,但奇怪的是,前 8 种颜色除外。