当前位置:首页 > 后端开发 > 正文

Java如何绘制曲线图?

在Java中绘制曲线图可使用 JFreeChart或XChart等第三方库,主要步骤:添加库依赖、创建数据集、配置图表对象(标题、坐标轴等)、生成图像并嵌入Swing组件或导出为文件。

在Java中绘制曲线图,推荐使用JFreeChart(开源且功能强大),下面通过完整示例分步讲解实现方法:


环境准备

  1. 添加Maven依赖: <dependency> <groupId>org.jfree</groupId> <artifactId>jfreechart</artifactId> <version>1.5.3</version> </dependency>

    或手动下载JAR包


绘制曲线图核心代码

import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; public class CurveChartExample { public static void main(String[] args) { // 1. 创建数据集 XYSeries series = new XYSeries("温度变化"); series.add(1, 15); // (x, y)坐标 series.add(2, 18); series.add(3, 22); series.add(4, 17); series.add(5, 20); XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(series); // 2. 创建曲线图 JFreeChart chart = ChartFactory.createXYLineChart( "24小时温度监测", // 标题 "时间(小时)", // X轴标签 "温度(℃)", // Y轴标签 dataset // 数据集 ); // 3. 显示图表窗口 ChartFrame frame = new ChartFrame("曲线图", chart); frame.pack(); frame.setVisible(true); } }


关键步骤解析

  1. 数据准备

    Java如何绘制曲线图? 第1张

    • XYSeries 存储坐标点数据
    • XYSeriesCollection 封装多个数据系列(支持多条曲线)
  2. 自定义样式(可选增强):

    // 获取绘图区域 XYPlot plot = chart.getXYPlot();

// 设置曲线颜色和粗细

XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();

renderer.setSeriesPaint(0, Color.RED); // 第一条曲线红色

renderer.setSeriesStroke(0, new BasicStroke(2.0f)); // 线宽2像素

plot.setRenderer(renderer);

// 设置背景网格

plot.setBackgroundPaint(Color.WHITE);

plot.setDomainGridlinePaint(Color.LIGHT_GRAY); // X轴网格线

plot.setRangeGridlinePaint(Color.LIGHT_GRAY); // Y轴网格线

Java如何绘制曲线图? 第2张

高级应用技巧

  1. 动态更新数据

    series.add(6, 19); // 追加新数据点 chart.fireChartChanged(); // 触发图表重绘
  2. 多条曲线对比

    XYSeries series2 = new XYSeries("湿度"); series2.add(1, 40); series2.add(2, 45); dataset.addSeries(series2); // 添加到同一数据集
  3. 平滑曲线(使用样条插值):

    Java如何绘制曲线图? 第3张

    renderer.setSeriesShapesVisible(0, false); // 隐藏数据点 renderer.setSeriesLinesVisible(0, true);


替代方案推荐

  1. JavaFX图表(JDK8+内置):

  2. XChart库(轻量级):

    XYChart chart = QuickChart.getChart("示例", "X", "Y", "series", new double[]{1,2,3}, new double[]{15,18,22}); BitmapEncoder.saveBitmap(chart, "chart.png", BitmapFormat.PNG);

  3. 常见问题解决

    • 中文乱码:设置字体 chart.getTitle().setFont(new Font("宋体", Font.BOLD, 16));
    • 性能优化:大数据集时关闭图形标记 renderer.setSeriesShapesVisible(0, false); // 隐藏数据点
    • 坐标轴精度: NumberAxis axis = (NumberAxis) plot.getDomainAxis(); axis.setTickUnit(new NumberTickUnit(1)); // X轴每1单位显示刻度


    引用说明

    本文代码基于JFreeChart 1.5.3 API编写,遵循BSD开源协议,数据可视化建议参考《数据可视化最佳实践》原则,确保图表清晰传达信息。

    经验提示:工业场景建议结合JFreeChart的TimeSeries类处理时间序列数据,金融领域可使用CandlestickChart绘制K线图。

0