程序员的知识教程库

网站首页 > 教程分享 正文

JFreeChart生成折线图实例(jmp 折线图)

henian88 2024-10-20 05:56:03 教程分享 184 ℃ 0 评论

最近工作中有这样一个需求,需要在word文档中插入折线图。之前生成图表一般都是由前端生成,自己作为一个后端也没使用java生成过图表,网上查了下JFreeChart可以实现相关功能,自己尝试了下确实能够满足需求,在此简单记录下。

1、引入maven依赖:

<dependency>
    <groupId>org.jfree</groupId>
    <artifactId>jfreechart</artifactId>
    <version>1.5.4</version>
</dependency>

2、单折线图

下面以一个展示月销售额折线图的例子:

@Test
public void test01() throws IOException {
    // 创建数据集
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    dataset.addValue(12, "月销售额", "1月");
    dataset.addValue(11, "月销售额", "2月");
    dataset.addValue(15, "月销售额", "3月");
    dataset.addValue(12, "月销售额", "4月");
    dataset.addValue(14, "月销售额", "5月");
    dataset.addValue(11, "月销售额", "6月");
    dataset.addValue(14, "月销售额", "7月");
    dataset.addValue(11, "月销售额", "8月");
    dataset.addValue(14, "月销售额", "9月");
    dataset.addValue(13, "月销售额", "10月");
    dataset.addValue(14, "月销售额", "11月");
    dataset.addValue(13, "月销售额", "12月");

    // 创建并定制主题以支持中文
    StandardChartTheme theme = (StandardChartTheme) StandardChartTheme.createJFreeTheme();
    theme.setTitlePaint(Color.BLACK);
    theme.setExtraLargeFont(new Font("宋体", Font.PLAIN, 18)); // 使用支持中文的字体
    theme.setRegularFont(new Font("宋体", Font.PLAIN, 14));
    theme.setLargeFont(new Font("宋体", Font.PLAIN, 16));
    ChartFactory.setChartTheme(theme);
    // 创建折线图
    JFreeChart chart = ChartFactory.createLineChart(
            "折线图", // 图表标题
            "月份", // X轴标签
            "月销售额", // Y轴标签
            dataset // 数据集
    );
    int width = 640; // 图片宽度
    int height = 480; // 图片高度
    File file = new File("C:\\Users\\Administrator\\Desktop\\line_chart.png");
    ChartUtils.saveChartAsPNG(file, chart, width, height);
}

效果图如下:

3、双折线图

在上述月销售额折线图的基础上,再加一条折线,该折线用来表示月利润

@Test
public void test02() throws IOException {
    // 创建第一个数据系列
    XYSeries series1 = new XYSeries("月均销售额");
    series1.add(1,4);
    series1.add(2,11);
    series1.add(3,15);
    series1.add(4,12);
    series1.add(5,14);
    series1.add(6,19);
    series1.add(7,8);
    series1.add(8,11);
    series1.add(8,14);
    series1.add(10,14);
    series1.add(11,9);
    series1.add(12,13);

    // 创建第二个数据系列
    XYSeries series2 = new XYSeries("月利润");
    series2.add(1,2);
    series2.add(2,4);
    series2.add(3,8);
    series2.add(4,5);
    series2.add(5,7);
    series2.add(6,13);
    series2.add(7,3);
    series2.add(8,7);
    series2.add(8,7);
    series2.add(10,12);
    series2.add(11,7);
    series2.add(12,11);

    // 将两个数据系列放入数据集
    XYSeriesCollection dataset = new XYSeriesCollection();
    dataset.addSeries(series1);
    dataset.addSeries(series2);

    // 创建并定制主题以支持中文
    StandardChartTheme theme = (StandardChartTheme) StandardChartTheme.createJFreeTheme();
    theme.setTitlePaint(Color.BLACK);
    theme.setExtraLargeFont(new Font("宋体", Font.PLAIN, 18)); // 使用支持中文的字体
    theme.setRegularFont(new Font("宋体", Font.PLAIN, 14));
    theme.setLargeFont(new Font("宋体", Font.PLAIN, 16));
    ChartFactory.setChartTheme(theme);

    // 创建折线图
    JFreeChart chart = ChartFactory.createXYLineChart(
            "",
            "月份",
            "金额",
            dataset,
            PlotOrientation.VERTICAL,
            true,  // 是否显示图例
            true,  // 是否生成工具提示
            false  // 是否生成URL链接
    );
    int width = 640; // 图片宽度
    int height = 480; // 图片高度
    // 将图表输出为PNG图片
    File file = new File("C:\\Users\\Administrator\\Desktop\\line_chart2.png");
    ChartUtils.saveChartAsPNG(file, chart, width, height);
}

效果图如下:

当然了JFreeChart的功能不只是生成折线图,JFreeChart是一个强大的开源Java库,用于创建各种图表,如柱状图、折线图、饼图、散点图等。因为需求只需要生成折线图,所以只是简单了解了折线图的生成方式,感兴趣的可以自己研究下。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表