如何结合散点图和折线图来显示回归线?JavaFX

如何结合散点图和折线图来显示回归线?JavaFX,java,charts,javafx,line,scatter,Java,Charts,Javafx,Line,Scatter,我创建了一个包含两组数据的散点图;第一组是实际数据(x=年,y=便士),第二组产生相同的点,但用于回归线。然而,我遇到的问题是,这两组数据都显示为分散点。我想将第一组显示为分散点,并将第二组显示在同一图形上,但显示为直线。我已经做了很长一段时间了,但我想不出一个方法来做这件事 散点图代码显示在oracle上;� 例如,我一直在尝试这样做: final ScatterChart<Number,Number> sc = new ScatterChart<Number

我创建了一个包含两组数据的散点图;第一组是实际数据(x=年,y=便士),第二组产生相同的点,但用于回归线。然而,我遇到的问题是,这两组数据都显示为分散点。我想将第一组显示为分散点,并将第二组显示在同一图形上,但显示为直线。我已经做了很长一段时间了,但我想不出一个方法来做这件事

散点图代码显示在oracle上;�

例如,我一直在尝试这样做:

final ScatterChart<Number,Number> sc = new
        ScatterChart<Number,Number>(xAxis,yAxis);
final LineChart<Number,Number> lc = new
        LineChart<Number,Number>(xAxis,yAxis);

XYChart.Series series1 = new XYChart.Series();
    series1.setName("Equities");
    series1.getData().add(new XYChart.Data(4.2, 193.2));
    series1.getData().add(new XYChart.Data(2.8, 33.6));

XYChart.Series series2 = new XYChart.Series();
    series2.setName("Mutual funds");
    series2.getData().add(new XYChart.Data(5.2, 229.2));
    series2.getData().add(new XYChart.Data(2.4, 37.6));

    sc.getData().addAll(series1);
    lc.getData(0.addAll(series2);
    Scene scene  = new Scene(sc, 500, 400);
    stage.setScene(scene);
    stage.show();
}

public static void main(String[] args) {
    launch(args);
}
最终散点图sc=新
散点图(xAxis,yAxis);
最终线形图lc=新
线形图(xAxis、yAxis);
XYChart.Series系列1=新的XYChart.Series();
系列1.集合名(“股权”);
series1.getData().add(新的XYChart.Data(4.2193.2));
series1.getData().add(新的XYChart.Data(2.8,33.6));
XYChart.Series系列2=新的XYChart.Series();
系列2.集合名(“共同基金”);
series2.getData().add(新的XYChart.Data(5.2229.2));
series2.getData().add(新的XYChart.Data(2.4,37.6));
sc.getData().addAll(系列1);
lc.getData(0.addAll(series2);
场景=新场景(sc,500400);
舞台场景;
stage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
问题是,场景只能设置为sc或lc,不能同时设置为sc或lc。我能做些什么,还是根本不可能


谢谢

我将两个散点图添加到窗格中,并将不透明度设置为(0.5)试试

我希望我帮了忙

final ScatterChart<Number,Number> sc = new
    ScatterChart<Number,Number>(xAxis,yAxis);
final LineChart<Number,Number> lc = new
    LineChart<Number,Number>(xAxis,yAxis);

XYChart.Series series1 = new XYChart.Series();
series1.setName("Equities");
series1.getData().add(new XYChart.Data(4.2, 193.2));
series1.getData().add(new XYChart.Data(2.8, 33.6));

XYChart.Series series2 = new XYChart.Series();
series2.setName("Mutual funds");
series2.getData().add(new XYChart.Data(5.2, 229.2));
series2.getData().add(new XYChart.Data(2.4, 37.6));

sc.getData().addAll(series1);
lc.getData().addAll(series2);

Pane pane=new Pane();
pane.getChildren().add(sc);
pane.getChildren().add(lc);

lc.setOpacity(0.5);

Scene scene  = new Scene(pane, 500, 400);
stage.setScene(scene);
stage.show();
}

public static void main(String[] args) {
  launch(args);
}
最终散点图sc=新
散点图(xAxis,yAxis);
最终线形图lc=新
线形图(xAxis、yAxis);
XYChart.Series系列1=新的XYChart.Series();
系列1.集合名(“股权”);
series1.getData().add(新的XYChart.Data(4.2193.2));
series1.getData().add(新的XYChart.Data(2.8,33.6));
XYChart.Series系列2=新的XYChart.Series();
系列2.集合名(“共同基金”);
series2.getData().add(新的XYChart.Data(5.2229.2));
series2.getData().add(新的XYChart.Data(2.4,37.6));
sc.getData().addAll(系列1);
lc.getData().addAll(series2);
窗格=新窗格();
pane.getChildren().add(sc);
pane.getChildren().add(lc);
lc.不透明度(0.5);
场景=新场景(窗格,500400);
舞台场景;
stage.show();
}
公共静态void main(字符串[]args){
发射(args);
}

虽然@Mailkov解决方案很好,但它也有一些缺点(重叠的图例、工具提示…)

为了在同一张图表中混合散点图和折线图,有一种非常简单的方法,使用css

我们用两个系列创建一个
LineChart
。假设第一个系列是散点,第二个系列是线条,使用css我们去掉了第一个系列的线条,而(这是可选的)我们去掉了第二个系列的符号,保留了两个图例

使用此css(chart.css):

该代码:

@Override
public void start(Stage stage) {
    final LineChart<Number,Number> sc = new LineChart<>(new NumberAxis(),new NumberAxis());

    XYChart.Series series1 = new XYChart.Series();
    series1.setName("Equities");
    series1.getData().add(new XYChart.Data(4.2, 193.2));
    series1.getData().add(new XYChart.Data(2.8, 33.6));
    series1.getData().add(new XYChart.Data(6.8, 23.6));

    XYChart.Series series2 = new XYChart.Series();
    series2.setName("Mutual funds");
    series2.getData().add(new XYChart.Data(5.2, 229.2));
    series2.getData().add(new XYChart.Data(2.4, 37.6));
    series2.getData().add(new XYChart.Data(6.4, 15.6));

    sc.setAnimated(false);
    sc.setCreateSymbols(true);

    sc.getData().addAll(series1, series2);

    Scene scene  = new Scene(sc, 500, 400);
    scene.getStylesheets().add(getClass().getResource("root.css").toExternalForm());
    stage.setScene(scene);
    stage.show();
}
@覆盖
公众假期开始(阶段){
最终线形图sc=新线形图(新编号轴(),新编号轴());
XYChart.Series系列1=新的XYChart.Series();
系列1.集合名(“股权”);
series1.getData().add(新的XYChart.Data(4.2193.2));
series1.getData().add(新的XYChart.Data(2.8,33.6));
series1.getData().add(新的XYChart.Data(6.8,23.6));
XYChart.Series系列2=新的XYChart.Series();
系列2.集合名(“共同基金”);
series2.getData().add(新的XYChart.Data(5.2229.2));
series2.getData().add(新的XYChart.Data(2.4,37.6));
series2.getData().add(新的XYChart.Data(6.4,15.6));
sc.1(假);
sc.setCreateSymbols(真);
sc.getData().addAll(系列1、系列2);
场景=新场景(sc,500400);
scene.getStylesheets().add(getClass().getResource(“root.css”).toExternalForm());
舞台场景;
stage.show();
}
我们将有一个包含两个不同系列的简单图表:

我没有足够的“声誉”在Mailkov的回答下面添加评论,但我认为提议的回答存在问题

1)事实上,散点图中完整的橙色圆点并不是它们应该在的位置(x=2.8和x=4.2)


一种更简单的方法可能是对所有系列使用折线图,然后对不希望绘制线条的任何系列添加下线。下面的行将系列0更改为无行,但对于其他系列,您只需更改编号(默认颜色XX)即可定义哪个系列

sc.lookup(".default-color0.chart-series-line").setStyle("-fxstroke: transparent");

非常类似于@JoséPereda,但可能比摆弄CSS文件更简单

另请参阅一些和。这是有效的,但如果我使用9系列,则
.default-color8…
无效,它会转而使用
.default-color0…
属性。知道我该如何解决这个问题吗?这是一个已知的问题,modena.css只设置了8个值(请参阅),但已经有一些类似的解决方案。
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class Exemple158bis_JavaFX_Overlaid_Stacked_Charts extends Application {

@Override
public void start(Stage stage) throws Exception {

    NumberAxis xAxis = new NumberAxis();
    NumberAxis yAxis = new NumberAxis();

    final ScatterChart<Number, Number> sc = new ScatterChart<>(xAxis, yAxis);
    final LineChart<Number, Number> lc = new LineChart<>(xAxis, yAxis);

    XYChart.Series series1 = new XYChart.Series();
    series1.setName("Equities");
    series1.getData().add(new XYChart.Data(4.2, 193.2));
    series1.getData().add(new XYChart.Data(2.8, 33.6));

    XYChart.Series series2 = new XYChart.Series();
    series2.setName("Mutual funds");
    series2.getData().add(new XYChart.Data(5.2, 229.2));
    series2.getData().add(new XYChart.Data(2.4, 37.6));

    sc.getData().addAll(series1);
    lc.getData().addAll(series2);

    Pane pane = new Pane();
    pane.getChildren().add(sc);
    pane.getChildren().add(lc);

    lc.setOpacity(0.5);

    Scene scene = new Scene(pane, 800, 600);
    stage.setScene(scene);
    stage.show();
}

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

}
NumberAxis xAxis = new NumberAxis(0, 5.5, 0.5); 
NumberAxis yAxis = new NumberAxis(0, 240, 10); 
sc.lookup(".default-color0.chart-series-line").setStyle("-fxstroke: transparent");