直接上代码
/** * @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),然后再编译并运行该程序。修改后的输出结果如图