Java 如何否生成 Excel 气泡图?

Java 如何否生成 Excel 气泡图?

rt

阅读 1.1k
avatarAI BotBETA

在 Java 中生成 Excel 气泡图需要使用第三方库,比如 Apache POI 和 JFreeChart。下面是一个简单的示例代码,演示如何使用这些库生成 Excel 气泡图:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.data.xy.*;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ExcelBubbleChartGenerator {
    public static void main(String[] args) throws IOException {
        // 创建 Excel 工作簿和工作表
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("Bubble Chart");

        // 创建数据集
        List<BubbleData> data = new ArrayList<>();
        data.add(new BubbleData(1, 2, 3));
        data.add(new BubbleData(4, 5, 6));
        data.add(new BubbleData(7, 8, 9));

        // 设置图表区域
        int rowCount = 0;
        int columnCount = 0;
        for (BubbleData point : data) {
            Row row = sheet.createRow(rowCount++);
            row.createCell(columnCount++).setCellValue(point.getX());
            row.createCell(columnCount++).setCellValue(point.getY());
            row.createCell(columnCount++).setCellValue(point.getBubbleSize());
        }

        // 创建图表对象
        XYDataset dataset = new DefaultXYDataset(data);
        JFreeChart chart = ChartFactory.createBubbleChart("Bubble Chart", "X", "Y", dataset);
        XYPlot plot = chart.getXYPlot();
        plot.setSeriesRenderingOrder(SeriesRenderingOrder.REVERSE);
        plot.setSeriesPaint(0, Color.BLUE);
        plot.setSeriesPaint(1, Color.RED);
        plot.setSeriesPaint(2, Color.GREEN);
        plot.setSeriesStroke(0, new BasicStroke(2));
        plot.setSeriesStroke(1, new BasicStroke(2));
        plot.setSeriesStroke(2, new BasicStroke(2));
        plot.setBackgroundPaint(Color.WHITE);
        plot.setAxisShadowsVisible(true);
        plot.setRangeGridlinePaint(Color.BLACK);
        plot.setDomainGridlinePaint(Color.BLACK);
        plot.setAnnotationsVisible(true);
        plot.setAutoScale(true);
        plot.setAxisOffset(new SpatialOffset());
        plot.setOrientation(PlotOrientation.VERTICAL);
        plot.setRangeCrosshairVisible(true);
        plot.setDomainCrosshairVisible(true);
        plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
        plot.setSeriesFilled(true);
        plot.setBubbleRadius(0.08);
        plot.setBubbleMaxSize(100);
        plot.setBubbleMinSize(10);
        plot.setBubbleGradientFactor(0.5);
        plot.setPadding(new RectangleInsets(5, 5, 5, 5));
        plot.setBackgroundImage(null);
        chart.removeLegend(); // remove legend to make room for bubble sizes and labels

        // 将图表输出到 Excel 工作表上并保存文件
1 个回答

可以通过GcExcel来实现气泡图,GcExcel支持各种Excel图表,具体可以参考:
图表类型 - GcExcel 中文文档Java版 | 服务端高性能表格组件 - 葡萄城
生成气泡图的代码如下:

public void BubleCharts(){
    // Create a new workbook
    Workbook workbook = new Workbook();

    IWorksheet worksheet = workbook.getWorksheets().get(0);
    IShape shape = worksheet.getShapes().addChart(ChartType.Bubble, 250, 20, 360, 230);
    worksheet.getRange("A1:C10").setValue(new Object[][]{
            {"Blue", null, null},
            {125, 750, 3},
            {25, 625, 7},
            {75, 875, 5},
            {175, 625, 6},
            {"Red", null, null},
            {125, 500, 10},
            {25, 250, 1},
            {75, 125, 5},
            {175, 250, 8},
    });
    shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:C5"), RowCol.Columns);
    shape.getChart().getSeriesCollection().add(worksheet.getRange("A6:C10"), RowCol.Columns);
    shape.getChart().getChartTitle().setText("Bubble Chart");

    // Save to an excel file
    workbook.save("output/BubbleChart.xlsx");
}

最后结果是:
image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题