javaFX学习之气泡图(Bubble Chart)(转载)

参考原文地址:DOC-03-34 气泡图(Bubble Chart) | JavaFX中文资料

气泡图(bubble chart),它是一种根据分组数据点绘制气泡的双轴图表。

每个数据项由两到三个参数定义。图展示了一个典型的bubble chart,其中-每个数据项由三个参数表示:X值,Y值和气泡的半径。

典型的Bubble chart

创建Bubble Chart

要在JavaFX程序中创建Bubble Chart,至少需要实例化BubbleChart类、定义横向和纵向坐标轴、并且通过使用XYChart.Data类的构造方法来指定一组或多组数据,XYChart.Data类的构造方法可以带有两个或三个参数。例34-1创建了包含两组数据的Bubble chart。每个数据项通过X和Y两个值表示:一个是周数,另一个是产品的预算数

用两个数据参数创建Bubble Chart

 

 

 

/**
 * @author zhaoyong
 * @Date 2022/5/12
 * @Description
 */
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.BubbleChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;


public class BubbleChartSample extends Application {

    @Override public void start(Stage stage) {
        stage.setTitle("气泡图例");
        final NumberAxis xAxis = new NumberAxis(1, 53, 4);//设定x轴最小值,最大值,刻度值
        final NumberAxis yAxis = new NumberAxis(0, 80, 10);//设定y轴最小值,最大值,刻度值
        final BubbleChart<Number,Number> blc = new
                BubbleChart<>(xAxis,yAxis);//创建一个气泡图实例
        xAxis.setLabel("星期");
        yAxis.setLabel("预算");
        blc.setTitle("预算检测");

        XYChart.Series series1 = new XYChart.Series();//创建一个数据序列对象
        series1.setName("商品 1");
        series1.getData().add(new XYChart.Data(3, 35));//画出图的数据序列坐标(x轴值,y轴值)相当于确定一个数据点
        series1.getData().add(new XYChart.Data(12, 60));//画出图的数据序列坐标(x轴值,y轴值)相当于确定一个数据点
        series1.getData().add(new XYChart.Data(15, 15));
        series1.getData().add(new XYChart.Data(22, 30));
        series1.getData().add(new XYChart.Data(28, 20));
        series1.getData().add(new XYChart.Data(35, 41));
        series1.getData().add(new XYChart.Data(42, 17));
        series1.getData().add(new XYChart.Data(49, 30));

        XYChart.Series series2 = new XYChart.Series();//创建一个数据序列对象
        series2.setName("商品 2");
        series2.getData().add(new XYChart.Data(8, 15));//画出图的数据序列坐标(x轴值,y轴值)相当于确定一个数据点
        series2.getData().add(new XYChart.Data(13, 23));//画出图的数据序列坐标(x轴值,y轴值)相当于确定一个数据点
        series2.getData().add(new XYChart.Data(15, 45));
        series2.getData().add(new XYChart.Data(24, 30));
        series2.getData().add(new XYChart.Data(38, 78));
        series2.getData().add(new XYChart.Data(40, 41));
        series2.getData().add(new XYChart.Data(45, 57));
        series2.getData().add(new XYChart.Data(47, 23));//画出图的数据序列坐标(x轴值,y轴值)相当于确定一个数据点

        Scene scene  = new Scene(blc);//创建场景对象,上面挂载报告图对象
        blc.getData().addAll(series1, series2);//数据图对象上挂载前文定义的数据序列对象
        stage.setScene(scene);//舞台挂载场景
        stage.show();//舞台展现
    }

    public static void main(String[] args) {
        launch(args);//启动javaFX程序
    }
}

此程序在NumberAxis类的构造方法中定义了数据范围的上下限和刻度单元。另外,由于次级刻度间隔设置为4,所以每个次级刻度都相当于一周 

为了让纵轴表示以美元为单位的钱的数量,可以使用一个刻度标签格式器(Formatter) 

NumberAxis.DefaultFormatter类可以为指定坐标轴的刻度标签添加前缀和后缀。在例中,Formatter为纵轴的每个刻度标签定义了一个美元($)前缀符号。表示后缀的参数值为null意味着没有添加后缀。应用了格式化后的bubble chart如图所示。 

格式化刻度标签

Java

1

yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis,"$ ",null));

 

 

 

 

________________________________________

使用ExtraValue属性

图中的Bubble Chart显示了一年内两个产品的预算信息。不过你还可以加强此程序并且从BubbleChart类的附加功能中收益。在给Bubble Chart指定数据组时可以使用extraValue属性并且定义XYChart.Data对象中的三个参数。

 改变预算监控程序的数据组,每个气泡表示特定产品已用预算的百分比。XYChart.Data对象的第三个参数定义了每个气泡的半径:半径越大表示已用预算的百分比越大。因此7.5的半径相当于用掉了75%的预算,5.5半径就表示用掉了55%,以此类推

 

/**
 * @author zhaoyong
 * @Date 2022/5/12
 * @Description
 */
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.BubbleChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;


public class BubbleChartSample extends Application {

    @Override public void start(Stage stage) {
        stage.setTitle("气泡图例");
        final NumberAxis xAxis = new NumberAxis(1, 53, 4);//设定x轴最小值,最大值,刻度值
        final NumberAxis yAxis = new NumberAxis(0, 80, 10);//设定y轴最小值,最大值,刻度值
        final BubbleChart<Number,Number> blc = new
                BubbleChart<>(xAxis,yAxis);//创建一个气泡图实例
        xAxis.setLabel("星期");
        yAxis.setLabel("预算");
        blc.setTitle("预算检测");

        XYChart.Series series1 = new XYChart.Series();//创建一个数据序列对象
        series1.setName("商品 1");

        series1.getData().add(new XYChart.Data(3, 35, 2));//画出图的数据序列坐标(x轴值,y轴值,气泡半径)相当于确定一个数据点
        series1.getData().add(new XYChart.Data(12, 60, 1.8));
        series1.getData().add(new XYChart.Data(15, 15, 7));
        series1.getData().add(new XYChart.Data(22, 30, 2.5));
        series1.getData().add(new XYChart.Data(28, 20, 1));
        series1.getData().add(new XYChart.Data(35, 41, 5.5));
        series1.getData().add(new XYChart.Data(42, 17, 9));
        series1.getData().add(new XYChart.Data(49, 30, 1.8));

        XYChart.Series series2 = new XYChart.Series();//创建一个数据序列对象
        series2.setName("商品 2");
        series2.getData().add(new XYChart.Data(8, 15, 2));//画出图的数据序列坐标(x轴值,y轴值,气泡半径)相当于确定一个数据点
        series2.getData().add(new XYChart.Data(13, 23, 1));
        series2.getData().add(new XYChart.Data(15, 45, 3));
        series2.getData().add(new XYChart.Data(24, 30, 4.5));
        series2.getData().add(new XYChart.Data(38, 78, 1));
        series2.getData().add(new XYChart.Data(40, 41, 7.5));
        series2.getData().add(new XYChart.Data(45, 57, 2));
        series2.getData().add(new XYChart.Data(47, 23, 3.8));
        yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis,"$ ",null));
        Scene scene  = new Scene(blc);//创建场景对象,上面挂载报告图对象
        blc.getData().addAll(series1, series2);//数据图对象上挂载前文定义的数据序列对象
        stage.setScene(scene);//舞台挂载场景
        stage.show();//舞台展现
    }

    public static void main(String[] args) {
        launch(args);//启动javaFX程序
    }
}
预算监控程序添加了以上代码以后,编译并运行的结果如图

 

改变绘图区和刻度标记的外观设置

你可以改变绘图区和坐标轴的外观。检查JavaFX的API文档中一些可用的属性和方法来修改预算监控程序的外观。

verticalGridLinesVisible和horizontalGridLinesVisible属性可以控制网格线显示与否。

除了绘图区的属性之外,也可以修改坐标轴的属性来得到所需要的外观

/**
 * @author zhaoyong
 * @Date 2022/5/12
 * @Description
 */
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.BubbleChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.paint.Color;
import javafx.stage.Stage;


public class BubbleChartSample extends Application {

    @Override public void start(Stage stage) {
        stage.setTitle("气泡图例");
        final NumberAxis xAxis = new NumberAxis(1, 53, 4);//设定x轴最小值,最大值,刻度值
        final NumberAxis yAxis = new NumberAxis(0, 80, 10);//设定y轴最小值,最大值,刻度值
        final BubbleChart<Number,Number> blc = new
                BubbleChart<>(xAxis,yAxis);//创建一个气泡图实例
        xAxis.setLabel("星期");
        yAxis.setLabel("预算");
        blc.setTitle("预算检测");

        XYChart.Series series1 = new XYChart.Series();//创建一个数据序列对象
        series1.setName("商品 1");

        series1.getData().add(new XYChart.Data(3, 35, 2));//画出图的数据序列坐标(x轴值,y轴值,气泡半径)相当于确定一个数据点
        series1.getData().add(new XYChart.Data(12, 60, 1.8));
        series1.getData().add(new XYChart.Data(15, 15, 7));
        series1.getData().add(new XYChart.Data(22, 30, 2.5));
        series1.getData().add(new XYChart.Data(28, 20, 1));
        series1.getData().add(new XYChart.Data(35, 41, 5.5));
        series1.getData().add(new XYChart.Data(42, 17, 9));
        series1.getData().add(new XYChart.Data(49, 30, 1.8));

        XYChart.Series series2 = new XYChart.Series();//创建一个数据序列对象
        series2.setName("商品 2");
        series2.getData().add(new XYChart.Data(8, 15, 2));//画出图的数据序列坐标(x轴值,y轴值,气泡半径)相当于确定一个数据点
        series2.getData().add(new XYChart.Data(13, 23, 1));
        series2.getData().add(new XYChart.Data(15, 45, 3));
        series2.getData().add(new XYChart.Data(24, 30, 4.5));
        series2.getData().add(new XYChart.Data(38, 78, 1));
        series2.getData().add(new XYChart.Data(40, 41, 7.5));
        series2.getData().add(new XYChart.Data(45, 57, 2));
        series2.getData().add(new XYChart.Data(47, 23, 3.8));
        yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis,"$ ",null));
        Scene scene  = new Scene(blc);//创建场景对象,上面挂载报告图对象
        blc.getData().addAll(series1, series2);//数据图对象上挂载前文定义的数据序列对象
        blc.setVerticalGridLinesVisible(false);//去掉垂直网格线
        blc.setHorizontalGridLinesVisible(false);//去掉水平网格线
        xAxis.setTickLabelFill(Color.GREEN);//x轴刻度线颜色
        yAxis.setTickLabelFill(Color.BLUE);//Y轴刻度线颜色的设置
        stage.setScene(scene);//舞台挂载场景
        stage.show();//舞台展现
    }

    public static void main(String[] args) {
        launch(args);//启动javaFX程序
    }
}

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值