javaFX学习笔记之 折线图用法

直接上代码

/**
 * @author zhaoyong
 * @Date 2022/4/26
 * @Description 折线图
 */
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;


public class LineChartSample extends Application {

    @Override public void start(Stage stage) {
        stage.setTitle("折线图标例");

        final NumberAxis xAxis = new NumberAxis();//定义一个x轴(数字横轴)
        final NumberAxis yAxis = new NumberAxis();//定义一个y轴(数字纵轴)
        xAxis.setLabel("x轴标题");
        //creating the chart
        final LineChart<Number,Number> lineChart =
                new LineChart<Number,Number>(xAxis,yAxis);//定义一个折线图,将前文定义的x轴和y轴对象挂载上

        lineChart.setTitle("股市趋势, 2022");//设置图的标题
        //defining a series
        XYChart.Series series = new XYChart.Series();//定义式创建一个数字序列
        series.setName("大盘指数");//数字序列添加标题名称
        //populating the series with data
        series.getData().add(new XYChart.Data(1, 23));//给数字序列添加序列值
        series.getData().add(new XYChart.Data(2, 14));
        series.getData().add(new XYChart.Data(3, 15));
        series.getData().add(new XYChart.Data(4, 24));
        series.getData().add(new XYChart.Data(5, 34));
        series.getData().add(new XYChart.Data(6, 36));
        series.getData().add(new XYChart.Data(7, 22));
        series.getData().add(new XYChart.Data(8, 45));
        series.getData().add(new XYChart.Data(9, 43));
        series.getData().add(new XYChart.Data(10, 17));
        series.getData().add(new XYChart.Data(11, 29));
        series.getData().add(new XYChart.Data(12, 25));

        Scene scene  = new Scene(lineChart,800,600);//定义一个场景设置场景大小,并挂载上文定义的图
        lineChart.getData().add(series);//将序列值添加到图中

        stage.setScene(scene);//舞台挂载场景
        stage.show();//舞台展现
    }

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

 

/**
 * @author zhaoyong
 * @Date 2022/4/26
 * @Description 折线图
 */
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;


public class LineChartSample extends Application {

    @Override public void start(Stage stage) {
        stage.setTitle("折线图标例");

        final NumberAxis xAxis = new NumberAxis();//定义一个x轴(数字横轴)
        final NumberAxis yAxis = new NumberAxis();//定义一个y轴(数字纵轴)
        xAxis.setLabel("x轴标题");
        //creating the chart
        final LineChart<Number,Number> lineChart =
                new LineChart<Number,Number>(xAxis,yAxis);//定义一个折线图,将前文定义的x轴和y轴对象挂载上

        lineChart.setTitle("股市趋势, 2022");//设置图的标题
        //defining a series
        XYChart.Series series = new XYChart.Series();//定义式创建一个数字序列
        series.setName("大盘指数");//数字序列添加标题名称
        //populating the series with data
        series.getData().add(new XYChart.Data(1, 23));//给数字序列添加序列值
        series.getData().add(new XYChart.Data(2, 14));
        series.getData().add(new XYChart.Data(3, 15));
        series.getData().add(new XYChart.Data(4, 24));
        series.getData().add(new XYChart.Data(5, 34));
        series.getData().add(new XYChart.Data(6, 36));
        series.getData().add(new XYChart.Data(7, 22));
        series.getData().add(new XYChart.Data(8, 45));
        series.getData().add(new XYChart.Data(9, 43));
        series.getData().add(new XYChart.Data(10, 17));
        series.getData().add(new XYChart.Data(11, 29));
        series.getData().add(new XYChart.Data(12, 25));

        Scene scene  = new Scene(lineChart,800,600);//定义一个场景设置场景大小,并挂载上文定义的图
        lineChart.getData().add(series);//将序列值添加到图中
        lineChart.setCreateSymbols(false);//禁用折线图的符号化,就是一个趋势图的样例(展示的折线图使用小圆圈符号来突出显示每个数据项。如果你想展示图中的数据趋势而不是具体的数据值,可以禁用掉图表符号)
        stage.setScene(scene);//舞台挂载场景
        stage.show();//舞台展现
    }

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

/**
 * @author zhaoyong
 * @Date 2022/4/26
 * @Description 折线图
 */
import javafx.application.Application;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;


public class LineChartSample extends Application {

    @Override public void start(Stage stage) {
        stage.setTitle("折线图标例");

        final NumberAxis xAxis = new NumberAxis();//定义一个x轴(数字横轴)
        final NumberAxis yAxis = new NumberAxis();//定义一个y轴(数字纵轴)
        xAxis.setLabel("x轴标题");
        //creating the chart
        final LineChart<Number,Number> lineChart =
                new LineChart<Number,Number>(xAxis,yAxis);//定义一个折线图,将前文定义的x轴和y轴对象挂载上

        lineChart.setTitle("股市趋势, 2022");//设置图的标题
        //defining a series
        XYChart.Series series = new XYChart.Series();//定义式创建一个数字序列
        series.setName("大盘指数");//数字序列添加标题名称
        //populating the series with data
        series.getData().add(new XYChart.Data(1, 23));//给数字序列添加序列值
        series.getData().add(new XYChart.Data(2, 14));
        series.getData().add(new XYChart.Data(3, 15));
        series.getData().add(new XYChart.Data(4, 24));
        series.getData().add(new XYChart.Data(5, 34));
        series.getData().add(new XYChart.Data(6, 36));
        series.getData().add(new XYChart.Data(7, 22));
        series.getData().add(new XYChart.Data(8, 45));
        series.getData().add(new XYChart.Data(9, 43));
        series.getData().add(new XYChart.Data(10, 17));
        series.getData().add(new XYChart.Data(11, 29));
        series.getData().add(new XYChart.Data(12, 25));
        xAxis.setSide(Side.TOP);//坐标轴与绘图区的相对位置是默认的。当然,也可以通过调用setSide方法来让某个坐标轴显示到绘图区的另一侧,将横轴移到绘图区的上方
        Scene scene  = new Scene(lineChart,800,600);//定义一个场景设置场景大小,并挂载上文定义的图
        lineChart.getData().add(series);//将序列值添加到图中
        lineChart.setCreateSymbols(false);//禁用折线图的符号化,就是一个趋势图的样例(展示的折线图使用小圆圈符号来突出显示每个数据项。如果你想展示图中的数据趋势而不是具体的数据值,可以禁用掉图表符号)
        stage.setScene(scene);//舞台挂载场景
        stage.show();//舞台展现
    }

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

为折线图创建分类

使用CategoryAxis类来代替NumberAxis类以使折线图中出现非数值型数据。

检查一下例中修改后的代码。该程序用CategoryAxis实例创建了横轴。为了适应横轴数据类型的变化,LineChart对象的声明也做了修改。

 使用来展示CategoryAxis月份

 

/**
 * @author zhaoyong
 * @Date 2022/4/26
 * @Description 折线图
 */
import javafx.application.Application;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;


public class LineChartSample extends Application {

    @Override public void start(Stage stage) {
        stage.setTitle("折线图标例");

        final CategoryAxis xAxis = new CategoryAxis();//定义一个x轴(文本横轴)
        final NumberAxis yAxis = new NumberAxis();//定义一个y轴(数字纵轴)
        xAxis.setLabel("x轴标题(月份)");
        //creating the chart
        final LineChart<String,Number> lineChart =
                new LineChart<String,Number>(xAxis,yAxis);//定义一个折线图,将前文定义的x轴和y轴对象挂载上

        lineChart.setTitle("股市趋势, 2022");//设置图的标题
        //defining a series
        XYChart.Series series = new XYChart.Series();//定义式创建一个数字序列
        series.setName("大盘指数");//数字序列添加标题名称
        //populating the series with data
        series.getData().add(new XYChart.Data("1月", 23));//给数字序列添加序列值
        series.getData().add(new XYChart.Data("2月", 14));
        series.getData().add(new XYChart.Data("3月", 15));
        series.getData().add(new XYChart.Data("4月", 24));
        series.getData().add(new XYChart.Data("5月", 34));
        series.getData().add(new XYChart.Data("6月", 36));
        series.getData().add(new XYChart.Data("7月", 22));
        series.getData().add(new XYChart.Data("8月", 45));
        series.getData().add(new XYChart.Data("9月", 43));
        series.getData().add(new XYChart.Data("10月", 17));
        series.getData().add(new XYChart.Data("11月", 29));
        series.getData().add(new XYChart.Data("12月", 25));
        xAxis.setSide(Side.TOP);//坐标轴与绘图区的相对位置是默认的。当然,也可以通过调用setSide方法来让某个坐标轴显示到绘图区的另一侧,将横轴移到绘图区的上方
        Scene scene  = new Scene(lineChart,800,600);//定义一个场景设置场景大小,并挂载上文定义的图
        lineChart.getData().add(series);//将序列值添加到图中
        lineChart.setCreateSymbols(false);//禁用折线图的符号化,就是一个趋势图的样例(展示的折线图使用小圆圈符号来突出显示每个数据项。如果你想展示图中的数据趋势而不是具体的数据值,可以禁用掉图表符号)
        stage.setScene(scene);//舞台挂载场景
        stage.show();//舞台展现
    }

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

_____________________________________

通常折线图可用于分析同一时间段内的不同数据集。使用多组XYChart.Data对象可以实现这个功能

为折线图增加数据序列

例提供了带有三组数据的股票监视程序源码。除了前一个例子中展示的那一个数据序列之外,还另外声明了两个新的数据序列。

这些数据序列通过连续调用getData和addAll方法添加到了图表之中。

向股票监视样例中增加两个新的数据序列 

每个数据序列都通过调用setName方法定义了一个唯一的名称。编译并运行此程序的结果 

 

 

/**
 * @author zhaoyong
 * @Date 2022/4/26
 * @Description 折线图
 */
import javafx.application.Application;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;


public class LineChartSample extends Application {

    @Override public void start(Stage stage) {
        stage.setTitle("折线图标例");

        final CategoryAxis xAxis = new CategoryAxis();//定义一个x轴(文本横轴)
        final NumberAxis yAxis = new NumberAxis();//定义一个y轴(数字纵轴)
        xAxis.setLabel("x轴标题(月份)");
        //creating the chart
        final LineChart<String,Number> lineChart =
                new LineChart<String,Number>(xAxis,yAxis);//定义一个折线图,将前文定义的x轴和y轴对象挂载上

        lineChart.setTitle("股市趋势, 2022");//设置图的标题
        //defining a series
        XYChart.Series series1 = new XYChart.Series();//定义式创建一个数字序列
        series1.setName("大盘指数");//数字序列添加标题名称
        //populating the series with data
        series1.getData().add(new XYChart.Data("1月", 23));//给数字序列添加序列值
        series1.getData().add(new XYChart.Data("2月", 14));
        series1.getData().add(new XYChart.Data("3月", 15));
        series1.getData().add(new XYChart.Data("4月", 24));
        series1.getData().add(new XYChart.Data("5月", 34));
        series1.getData().add(new XYChart.Data("6月", 36));
        series1.getData().add(new XYChart.Data("7月", 22));
        series1.getData().add(new XYChart.Data("8月", 45));
        series1.getData().add(new XYChart.Data("9月", 43));
        series1.getData().add(new XYChart.Data("10月", 17));
        series1.getData().add(new XYChart.Data("11月", 29));
        series1.getData().add(new XYChart.Data("12月", 25));
        XYChart.Series series2 = new XYChart.Series();
        series2.setName("m20");
        series2.getData().add(new XYChart.Data("1月",  33));
        series2.getData().add(new XYChart.Data("2月",  34));
        series2.getData().add(new XYChart.Data("3月",  25));
        series2.getData().add(new XYChart.Data("4月",  44));
        series2.getData().add(new XYChart.Data("5月",  39));
        series2.getData().add(new XYChart.Data("6月",  16));
        series2.getData().add(new XYChart.Data("7月",  55));
        series2.getData().add(new XYChart.Data("8月",  54));
        series2.getData().add(new XYChart.Data("9月",  48));
        series2.getData().add(new XYChart.Data("10月", 27));
        series2.getData().add(new XYChart.Data("11月", 37));
        series2.getData().add(new XYChart.Data("12月", 29));

        XYChart.Series series3 = new XYChart.Series();
        series3.setName("m30");
        series3.getData().add(new XYChart.Data("1月",  44));
        series3.getData().add(new XYChart.Data("2月",  35));
        series3.getData().add(new XYChart.Data("3月",  36));
        series3.getData().add(new XYChart.Data("4月",  33));
        series3.getData().add(new XYChart.Data("5月",  31));
        series3.getData().add(new XYChart.Data("6月",  26));
        series3.getData().add(new XYChart.Data("7月",  22));
        series3.getData().add(new XYChart.Data("8月",  25));
        series3.getData().add(new XYChart.Data("9月",  43));
        series3.getData().add(new XYChart.Data("10月", 44));
        series3.getData().add(new XYChart.Data("11月", 45));
        series3.getData().add(new XYChart.Data("12月", 44));


        Scene scene  = new Scene(lineChart,800,600);//定义一个场景设置场景大小,并挂载上文定义的图
        lineChart.getData().addAll(series1,series2,series3);//将序列值添加到图中
        lineChart.setCreateSymbols(false);//禁用折线图的符号化,就是一个趋势图的样例(展示的折线图使用小圆圈符号来突出显示每个数据项。如果你想展示图中的数据趋势而不是具体的数据值,可以禁用掉图表符号)
        stage.setScene(scene);//舞台挂载场景
        stage.show();//舞台展现
    }

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

需要注意,折线的不同颜色根据addAll方法中相应数据序列的声明顺序决定。如果这样来修改声明顺序:lineChart.getData().addAll(series3, series1, series2),然后再编译并运行该程序。修改后的输出结果如图 

 

 

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
JavaFX 是一种用于构建富客户端应用程序的框架,而 ECharts 是一种基于 JavaScript 的可视化图表库,可以用于生成各种类型的图表,包括折线图。下面是使用 JavaFX 和 ECharts 绘制折线图的步骤: 1. 首先,需要在 JavaFX 应用程序中添加 ECharts 的 JavaScript 文件。可以将文件下载到本地并在 HTML 文件中引用,也可以使用 ECharts 提供的在线 CDN 地址。 2. 在 JavaFX 中创建一个 WebView 控件,该控件可以用来显示 HTML 内容。 3. 使用 JavaFX 的 WebEngine 类将 HTML 文件加载到 WebView 控件中。 4. 在 HTML 文件中使用 ECharts 的 API 生成折线图,并将图表数据传递给 ECharts。 5. 将生成的 HTML 内容插入到 WebView 控件中。 下面是一个简单的示例代码,展示了如何在 JavaFX 中绘制折线图: ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; public class LineChartDemo extends Application { @Override public void start(Stage primaryStage) { WebView webView = new WebView(); WebEngine webEngine = webView.getEngine(); String htmlContent = "<html>\n" + " <head>\n" + " <!-- 引入 echarts 的 CDN 地址 -->\n" + " <script src=\"https://cdn.jsdelivr.net/npm/echarts@5.2.1/dist/echarts.min.js\"></script>\n" + " </head>\n" + " <body>\n" + " <!-- 创建一个 div 元素,用于显示折线图 -->\n" + " <div id=\"line-chart\" style=\"width: 600px;height:400px;\"></div>\n" + " <script>\n" + " // 基于准备好的 dom,初始化 echarts 实例\n" + " var myChart = echarts.init(document.getElementById('line-chart'));\n" + "\n" + " // 指定图表的配置项和数据\n" + " var option = {\n" + " xAxis: {\n" + " type: 'category',\n" + " data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n" + " },\n" + " yAxis: {\n" + " type: 'value'\n" + " },\n" + " series: [{\n" + " data: [820, 932, 901, 934, 1290, 1330, 1320],\n" + " type: 'line'\n" + " }]\n" + " };\n" + "\n" + " // 使用刚指定的配置项和数据显示图表。\n" + " myChart.setOption(option);\n" + " </script>\n" + " </body>\n" + "</html>"; webEngine.loadContent(htmlContent); Scene scene = new Scene(webView, 600, 400); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` 在上面的示例代码中,我们创建了一个 WebView 控件,并将 ECharts 的 JavaScript 文件加载到 HTML 文件中。然后,我们使用 ECharts 的 API 生成了一个折线图,并将图表数据传递给 ECharts。最后,我们将生成的 HTML 内容插入到 WebView 控件中,并将该控件添加到 JavaFX 应用程序的场景中。运行该应用程序,就可以在 JavaFX 窗口中看到生成的折线图了。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值