JavaFX线条图色差

JavaFX线条图色差,java,javafx,Java,Javafx,我在JavaFx中有一个有两条线的线图,我想给线之间的空间上色。我在网上搜索了一下,但什么也没找到。 这就是我所拥有的: 我希望它看起来像:多亏了 我能解决我的问题 我过度使用了图表的布局图children(),如下所示: super.layoutPlotChildren(); XYChart.Series s = (XYChart.Series) getData().get(0); XYChart.Series d = (XYChart.Series) getData()

我在JavaFx中有一个有两条线的线图,我想给线之间的空间上色。我在网上搜索了一下,但什么也没找到。 这就是我所拥有的:

我希望它看起来像:

多亏了 我能解决我的问题

我过度使用了
图表的
布局图children()
,如下所示:

 super.layoutPlotChildren();
    XYChart.Series s =  (XYChart.Series) getData().get(0);
    XYChart.Series d = (XYChart.Series) getData().get(1);
    ObservableList<XYChart.Data<X,Y>> systole = s.getData();
    ObservableList<XYChart.Data<X,Y>> diastole = d.getData();

    for(int i = 0; i < systole.size()-1; i++)
    {       
            XYChart.Data SysPoint  = systole.get(i);
            XYChart.Data DiasPoint = diastole.get(i);
            double x = getXAxis().getDisplayPosition(SysPoint.getXValue().toString()); 
            double y = getYAxis().getDisplayPosition(DiasPoint.getYValue()); 
            double x2 = getXAxis().getDisplayPosition(systole.get((i+1)).getXValue().toString());
            double y2 = getYAxis().getDisplayPosition(diastole.get((i+1)).getYValue());
              Polygon polygon = new Polygon();
              LinearGradient linearGrad = new LinearGradient(
            0,   // start X 
            0,   // start Y
            0,   // end X
            1, // end Y
            true, // proportional
            CycleMethod.NO_CYCLE, // cycle colors
            // stops
            new Stop(0.1f, Color.rgb(255, 0, 0, .3)),
            new Stop(0.5f, Color.rgb(127, 0, 127, .3)),
            new Stop(1.0f, Color.rgb(0, 0, 255, .3)));

                polygon.getPoints().addAll(new Double[]{
                    x,y,
                    x, getYAxis().getDisplayPosition(SysPoint.getYValue()),   
                      x2,getYAxis().getDisplayPosition(systole.get((i+1)).getYValue()), 
                    x2,y2
                });
            getPlotChildren().add(polygon);
            polygon.toFront();
            polygon.setFill(linearGrad);
    }               


}
super.layoutPlotChildren();
XYChart.Series s=(XYChart.Series)getData().get(0);
XYChart.Series d=(XYChart.Series)getData().get(1);
可观测收缩=s.getData();
可观察舒张期=d.getData();
对于(int i=0;i<收缩.size()-1;i++)
{       
XYChart.Data SysPoint=收缩.get(i);
XYChart.Data DiasPoint=diastole.get(i);
双x=getXAxis().getDisplayPosition(SysPoint.getXValue().toString());
双y=getYAxis().getDisplayPosition(DiasPoint.getYValue());
double x2=getXAxis().getDisplayPosition(收缩期.get((i+1)).getXValue().toString());
双y2=getYAxis().getDisplayPosition(舒张期.get((i+1)).getYValue());
多边形=新多边形();
LinearGradient linearGrad=新的LinearGradient(
0,//开始X
0,//开始Y
0,//结束X
1,//结束Y
正确,//成比例
CycleMethod.NO\u CYCLE,//循环颜色
//停止
新挡块(0.1f,Color.rgb(255,0,0,3)),
新挡块(0.5f,彩色.rgb(127,0,127,3)),
新挡块(1.0f,Color.rgb(0,025,3));
polygon.getPoints().addAll(新的双精度[]{
x、 y,,
x、 getYAxis().getDisplayPosition(SysPoint.getYValue()),
x2,getYAxis().getDisplayPosition(收缩期.get((i+1)).getYValue()),
x2,y2
});
getPlotChildren().add(多边形);
多边形。toFront();
多边形.setFill(linearGrad);
}               
}
我创建了一个连接两个收缩点和两个舒张点的多边形,并用线性半径填充它们

我的图表现在看起来像:

在我看来,这似乎是一个自定义折线图impl,其中覆盖了
layoutPlotChildren()
。在这种方法中,你需要做一点数学,也许(德语)对你有帮助。两者之间的空间可以是svg路径。如果两个序列不相交,您可以尝试使用面积图,其中下部序列有一个透明的背景。@UlukBiy通常这永远不会发生:-)收缩和舒张是上下血压,因此如果它们相交,此图将是最小的问题。。。但是在一个面积图中,上面的背景不是也画在轴的下面吗?我画了
layoutPlotChildren()
,现在它可以工作了,谢谢much@Zion如果您愿意,您可以将您的解决方案发布为下面的答案(延迟一段时间后,您将能够将其标记为正确)。这可能会对其他用户有所帮助。哇,有梯度!真是一个很好的解决方案,谢谢你的发帖!