Java如何绘制曲线图?

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

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

Java如何绘制曲线图?


环境准备

  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. 数据准备

    • 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如何绘制曲线图?


3. **导出为图片**:
```java
ChartUtils.saveChartAsPNG(
    new File("chart.png"), // 输出文件
    chart,                // 图表对象
    800,                  // 宽度
    600                   // 高度
);

高级应用技巧

  1. 动态更新数据

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

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

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

替代方案推荐

  1. 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);
  2. XChart库(轻量级):

    Java如何绘制曲线图?

    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线图。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/38791.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月25日 05:18
下一篇 2025年6月20日 08:12

相关推荐

  • Java如何保存数据到数据库

    在Java程序中保存信息可通过多种方式实现:使用文件存储(如文本文件、二进制文件)、数据库(如MySQL、H2)、序列化机制(ObjectOutputStream)保存对象状态,或借助内存缓存(如Redis),具体选择取决于数据量、持久性需求及访问效率。

    2025年6月8日
    100
  • Java如何快速获取PI值?

    在Java中可通过Math.PI常量直接获取圆周率值,例如double pi = Math.PI; 该常量精度约15位小数,适用于圆周长、面积等数学计算场景。

    2025年6月18日
    100
  • Java简易计算器如何实现?

    Java计算器程序代码实现图形界面,包含数字按钮、运算符按钮及结果显示框,通过事件监听处理用户点击,利用条件判断或switch执行加减乘除等基本运算,并处理异常情况(如除数为零),核心是界面布局与逻辑运算的结合。

    2025年6月13日
    100
  • Java如何截取小数点前整数?

    在Java中,取小数点前两位可通过以下步骤实现:先将数字转为BigDecimal获取整数部分,再转为字符串截取前两位,若整数部分不足两位,则取全部;若原数为负数且整数部分非零,结果前添加负号;整数部分为零则返回”0″。

    2025年6月2日
    700
  • Java中二进制如何计算?

    在Java中,二进制数以0b或0B前缀表示(如0b1010),可通过Integer.toBinaryString()将整数转为二进制字符串,或使用位运算符(&、|、^、“)直接操作二进制位。

    2025年6月9日
    100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN