上一篇                     
               
			  Java如何绘制曲线图?
- 后端开发
- 2025-06-25
- 2647
 在Java中绘制曲线图可使用JFreeChart或XChart等第三方库,主要步骤:添加库依赖、创建数据集、配置图表对象(标题、坐标轴等)、生成图像并嵌入Swing组件或导出为文件。
 
在Java中绘制曲线图,推荐使用JFreeChart库(开源且功能强大),下面通过完整示例分步讲解实现方法:
环境准备
- 添加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);
    }
} 
关键步骤解析
-  数据准备: - XYSeries存储坐标点数据
- XYSeriesCollection封装多个数据系列(支持多条曲线)
 
-  自定义样式(可选增强):  // 获取绘图区域 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轴网格线
3. **导出为图片**:
```java
ChartUtils.saveChartAsPNG(
    new File("chart.png"), // 输出文件
    chart,                // 图表对象
    800,                  // 宽度
    600                   // 高度
);高级应用技巧
-  动态更新数据:  series.add(6, 19); // 追加新数据点 chart.fireChartChanged(); // 触发图表重绘 
-  多条曲线对比: XYSeries series2 = new XYSeries("湿度"); series2.add(1, 40); series2.add(2, 45); dataset.addSeries(series2); // 添加到同一数据集
-  平滑曲线(使用样条插值): renderer.setSeriesShapesVisible(0, false); // 隐藏数据点 renderer.setSeriesLinesVisible(0, true); 
替代方案推荐
-  JavaFX图表(JDK8+内置): LineChart<Number,Number> chart = new LineChart<>(xAxis, yAxis); XYChart.Series data = new XYChart.Series(); data.getData().add(new XYChart.Data(1, 15)); chart.getData().add(data); 
-  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);
常见问题解决
- 中文乱码:设置字体 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线图。
 
  
			 
			 
			 
			 
			 
			