【问题标题】:How to fill between two AreaCharts in JavaFX?如何在 JavaFX 中的两个 AreaCharts 之间填充?
【发布时间】:2016-07-16 15:09:25
【问题描述】:

JavaFX 中的面积图填充数据线和零 y 轴之间的区域。

我只想知道如何在两个面积图之间填充。

更多详情:

我正在生成一堆随机游走。然后,我为路径、均值和均值 +/- 标准创建三个不同的 XY 图表。偏差。最后,我使用 StackPane 将每个图表以透明背景放置在彼此之上。

图表的顺序必须如下: 1. 最背面的模拟路径图(LineChart)。 2.标准。偏差图(AreaChart)。 3. 顶部的均值图(LineChart)。

图片 - 突出问题。

我怎样才能做到这一点?首选 CSS。

【问题讨论】:

  • 也许你可以使用 -fx-blend-mode 属性。
  • @whitesite 谢谢你,但我也无法用混合模式修复它
  • 我也尝试构建多边形,但 .getDisplayPosition() 由于某种原因没有返回正确的值。我做得不对。

标签: java javafx charts


【解决方案1】:

我设法使用-fx-blend-mode 属性实现了结果。以下是两个面积图的示例:

public void start(Stage stage) throws Exception {

    stage.setTitle("Test");
    final NumberAxis xAxis = new NumberAxis();
    final NumberAxis yAxis = new NumberAxis();
    xAxis.setLabel("X");
    final AreaChart<Number,Number> lineChart =
            new AreaChart<>(xAxis,yAxis);

    lineChart.setTitle("Test");

    XYChart.Series series1 = new XYChart.Series();
    series1.setName("S1");
    series1.getData().add(new XYChart.Data(0, 0));
    series1.getData().add(new XYChart.Data(20, 20));

    XYChart.Series series2 = new XYChart.Series();
    series2.setName("S2");
    series2.getData().add(new XYChart.Data(0, 0));
    series2.getData().add(new XYChart.Data(20, 10));

    Scene scene  = new Scene(lineChart,800,600);
    lineChart.getData().addAll(series1,series2);

    stage.setScene(scene);
    scene.getStylesheets().add("/test.css");
    stage.show();
}

还有test.css中的css:

.default-color0.chart-series-area-fill {
    -fx-fill: #FF0000;
    -fx-blend-mode: difference;
}
.default-color1.chart-series-area-fill {
    -fx-fill: #FF0000;
    -fx-blend-mode: difference;
}

结果:

编辑
屏幕/乘法的 CSS:

.default-color0.chart-series-area-fill {
    -fx-fill: rgb(0,178,0);
    -fx-blend-mode: screen;
}

.default-color1.chart-series-area-fill {
    -fx-fill: rgb(255,246,255);
    -fx-blend-mode: multiply;
}

结果:

【讨论】:

  • 非常感谢!效果很好。
  • 当我尝试更改填充颜色时,它不再起作用(#FF0000 除外)。你能告诉我为什么吗?
  • @EdvBeq 我不是混合专家,但这只是简单的数学运算。混合模式“差异”采用底部和顶部输入颜色,并从较大的值中减去较小的值。这意味着如果你传递 1(或十六进制的 FF)你会得到反转的颜色,0 会给你相同的颜色。因此,将 1 传递给第一个区域图中的颜色通道,我们会得到倒置图表的背景颜色。为第二个面积图传递 1,我们再次获得反转颜色,这为我们提供了原始图表的背景。其他模式(即屏幕和乘法)可以给出类似的结果(见编辑),但您需要计算适当的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2013-12-25
  • 2021-10-23
  • 1970-01-01
  • 2015-03-07
  • 1970-01-01
相关资源
最近更新 更多