当前位置: 首页 > 教程 > JFreeChart >

JFreeChart 气泡图

精华
小牛编辑
159浏览
2023-03-14

什么是JFreeChart 气泡图

气泡图以三维方式表示信息。此图表是散点图(XY 图表)的变体,其中数据点由气泡替换,数据的附加维度(z 值)以气泡的大小表示。

下图显示了 JFreeChart 库中包含的气泡图的一些演示版本:

JFreeChart 气泡图的示例

让我们考虑以下气泡图的示例数据。

国家 汽车 公交车 卡车
印度 40 65 70
美国 30 20 50
中国 80 50 80
日本 11 50 20

以下代码根据上述示例数据创建气泡图:

package cn.xnip;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.BubbleXYItemLabelGenerator;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYBubbleRenderer;
import org.jfree.data.xy.DefaultXYZDataset;
import org.jfree.data.xy.XYZDataset;

import javax.swing.*;
import java.text.DecimalFormat;

public class BubbleChartExample extends JFrame {  
  
  private static final long serialVersionUID = 1L;  
  
  public BubbleChartExample(String title) {  
    super(title);  
  
    // Create dataset  
    XYZDataset dataset = createDataset();  
  
    // Create chart  
    JFreeChart chart = ChartFactory.createBubbleChart(  
        "Country(Cars, Buses, Trucks)",   
        "X-Values",   
        "Y-Values", dataset);  
  
      
    // Set range for X-Axis  
    XYPlot plot = chart.getXYPlot();  
    NumberAxis domain = (NumberAxis) plot.getDomainAxis();  
    domain.setRange(0, 100);  
  
    // Set range for Y-Axis  
    NumberAxis range = (NumberAxis) plot.getRangeAxis();  
    range.setRange(0, 100);  
      
    //Format label  
    XYBubbleRenderer renderer=(XYBubbleRenderer)plot.getRenderer();  
    BubbleXYItemLabelGenerator generator=new BubbleXYItemLabelGenerator(  
        " {0}:({1},{2},{3}) ",new DecimalFormat("0"),  
        new DecimalFormat("0"),  
        new DecimalFormat("0"));  
    renderer.setBaseItemLabelGenerator(generator);  
    renderer.setBaseItemLabelsVisible(true);  
      
    // Create Panel  
    ChartPanel panel = new ChartPanel(chart);  
    setContentPane(panel);  
  }  
  private XYZDataset createDataset() {  
    DefaultXYZDataset dataset = new DefaultXYZDataset();  
  
    dataset.addSeries("INDIA", new double[][] {   
      { 40 }, // X-Value   
      { 65 }, // Y-Value   
      { 70 }  // Z-Value   
     });  
    dataset.addSeries("USA", new double[][] { { 30 }, { 20 }, { 50 } });  
    dataset.addSeries("CHINA", new double[][] { { 80 }, { 50 }, { 80 } });  
    dataset.addSeries("JAPAN", new double[][] { { 11 }, { 50 }, { 20 } });  
  
    return dataset;  
  }  
  
  public static void main(String[] args) {  
    SwingUtilities.invokeLater(() -> {  
      BubbleChartExample example = new BubbleChartExample("小牛知识库网:Bubble Chart Example");  
      example.setSize(800, 400);  
      example.setLocationRelativeTo(null);  
      example.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);  
      example.setVisible(true);  
    });  
  }  
}  

输出结果为: