JFreeChart绘制折线图实例

  JFreeChart是JAVA平台上的一个开放的第三方图表绘制类库。只要下载JFreeChart的类库,导入项目即可使用。下面是一个绘制折线图的实例。各处注释都已经写的比较清晰了。

  1 package com.mvc.controller;
  2
  3 import java.util.HashMap;
  4 import java.util.List;
  5 import java.util.Map;
  6 import javax.servlet.http.HttpServletRequest;
  7 import java.awt.Color;
  8 import java.awt.Font;
  9 import java.awt.RenderingHints;
 10
 11 import org.jfree.chart.ChartColor;
 12 import org.jfree.chart.ChartFactory;
 13 import org.jfree.chart.JFreeChart;
 14 import org.jfree.chart.axis.CategoryAxis;
 15 import org.jfree.chart.axis.ValueAxis;
 16 import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
 17 import org.jfree.chart.plot.CategoryPlot;
 18 import org.jfree.chart.plot.PlotOrientation;
 19 import org.jfree.chart.renderer.category.LineAndShapeRenderer;
 20 import org.jfree.chart.servlet.ServletUtilities;
 21 import org.jfree.chart.title.TextTitle;
 22 import org.jfree.data.category.DefaultCategoryDataset;
 23
 24 import org.springframework.stereotype.Controller;
 25 import org.springframework.beans.factory.annotation.Autowired;
 26 import org.springframework.web.bind.annotation.RequestMapping;
 27 import org.springframework.web.bind.annotation.ResponseBody;
 28
 29 import com.alibaba.fastjson.JSON;
 30 import com.mvc.po.User;
 31 import com.mvc.service.UserService;
 32
 33 @Controller
 34 public class UserController {
 35
 36     @Autowired
 37     private UserService userService;
 38
 39     @RequestMapping("getChart.do")
 40    public @ResponseBody String getChart(HttpServletRequest request) throws Exception{
 41
 42         //1. 获得数据集合
 43         DefaultCategoryDataset dataset = new DefaultCategoryDataset();
 44         List<Map<String, Object>> list = userService.query();
 45         Map<String, Object> map = new HashMap<String, Object>();
 46
 47         for(int i = 0; i < list.size(); i++){
 48             map=list.get(i);
 49             dataset.addValue(Double.parseDouble(map.get("orderMoney").toString()), "订单金额", map.get("orderDate").toString());
 50         }
 51
 52        //2. 创建柱状图
 53         JFreeChart chart = ChartFactory.createLineChart("订单情况", // 图表标题
 54                "日期", // 目录轴的显示标签
 55                "金额", // 数值轴的显示标签
 56                dataset, // 数据集
 57                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
 58                false, // 是否显示图例(对于简单的柱状图必须是false)
 59                true, // 是否生成工具
 60                true // 是否生成URL链接
 61                );
 62
 63        //3. 设置整个柱状图的颜色和文字(char对象的设置是针对整个图形的设置)
 64        chart.setBackgroundPaint(ChartColor.WHITE); // 设置总的背景颜色
 65        chart.getLegend(0).setItemFont(new Font("宋体",Font.BOLD,20));
 66        chart.getLegend(0).setItemPaint(Color.BLUE);
 67
 68        //4. 获得图形对象,并通过此对象对图形的颜色文字进行设置
 69        CategoryPlot p = chart.getCategoryPlot();// 获得图表对象
 70        p.setNoDataMessage("当前没有数据统计!");
 71        p.setNoDataMessagePaint(Color.RED);
 72        p.setNoDataMessageFont(new Font("宋体",Font.BOLD,20));
 73        p.setBackgroundPaint(ChartColor.WHITE);//图形背景颜色
 74        p.setRangeGridlinePaint(ChartColor.DARK_GREEN);//图形表格颜色
 75        p.setDomainGridlinesVisible(true);  //设置背景网格线是否可见
 76        p.setDomainGridlinePaint(Color.GRAY); //设置背景竖网格线颜色
 77        p.setRangeGridlinePaint(Color.GRAY); //设置背景横网格线颜色
 78
 79        //显示节点数据
 80        LineAndShapeRenderer renderer = (LineAndShapeRenderer) p.getRenderer();
 81        renderer.setBaseItemLabelsVisible(true);
 82        renderer.setBaseShapesFilled(true);
 83        renderer.setBaseItemLabelsVisible(true);
 84        renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
 85        renderer.setBaseItemLabelFont(new Font("Dialog", 1, 14));
 86        p.setRenderer(renderer);
 87
 88        //5.解决乱码问题
 89        //(1)图形标题文字设置
 90        TextTitle textTitle = chart.getTitle();
 91        textTitle.setFont(new Font("宋体",Font.BOLD,20));
 92        textTitle.setPaint(Color.BLACK);
 93
 94        //(2)图形X轴坐标文字的设置
 95        CategoryPlot cPlot = (CategoryPlot) chart.getPlot();
 96        chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
 97        CategoryAxis axis = cPlot.getDomainAxis();
 98        axis.setLabelFont(new Font("宋体",Font.BOLD,15));  //设置X轴坐标上标题的文字
 99        axis.setLabelPaint(Color.BLACK);
100        axis.setTickLabelFont(new Font("宋体",Font.BOLD,12));  //设置X轴坐标上的文字
101        axis.setTickLabelPaint(Color.BLACK);
102
103        //(3)图形Y轴坐标文字的设置
104        ValueAxis valueAxis = cPlot.getRangeAxis();
105        valueAxis.setLabelFont(new Font("宋体",Font.BOLD,15));  //设置Y轴坐标上标题的文字
106        valueAxis.setLabelPaint(Color.BLACK);
107        valueAxis.setTickLabelFont(new Font("sans-serif",Font.BOLD,12));//设置Y轴坐标上的文字
108        valueAxis.setTickLabelPaint(Color.BLACK);
109
110        //6. 将图形转换为图片,传到前台
111        String fileName = ServletUtilities.saveChartAsJPEG(chart, 700, 400, null, request.getSession());
112        String chartURL=request.getContextPath() + "/chart?filename="+fileName;
113
114        return JSON.toJSONString(chartURL);
115    }
时间: 2024-09-29 03:26:06

JFreeChart绘制折线图实例的相关文章

用canvas绘制折线图

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>用canvas绘制折线图</title> 6 </head> 7 <body> 8 <canvas id="cv"></canvas> 9 </body> 1

Python中使用matplotlib 如何绘制折线图?

本文和大家分享的主要是python开发中matplotlib 绘制折线图相关内容,一起来看看吧,希望对大家学习和使用这部分内容有所帮助. matplotlib 1.安装matplotlib ① linux系统安装 # 安装matplotlib模块 $ sudo apt-get install python3-matplotlib# 如果是python2.7 执行如下命令 $ sudo apt-get install python-matplotlib# 如果你安装较新的Python,安装模块一乐

Android自定义控件 -Canvas绘制折线图(实现动态报表效果)

有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了很多插件,但是很多时候我们需要根据具体项目自定义这些图表,这一篇文章我们一起来看看如何在Android中使用Canvas绘制折线图.先看看绘制的效果: 代码: public class MyView extends View { //坐标轴原点的位置 private int xPoint=60; private int yPoint=260; //刻度长度 private int xScale=8;  //8个单位构

使用andbase开发框架实现绘制折线图

在Android中,当有绘制折线图的需求时,大多数人使用的AChartEngine,来进行折线图的绘制.AChartEngine图表引擎确实可以实现折线图的功能,除此之外,我们还可以使用andbase开发框架里面的图表模块,实现图标的绘制.前面文章介绍了使用andbase开发框架实现侧滑栏效果,今天,我们学习如何实现折线的绘制. 首先,我们还是看一下效果图 我们模拟的是一家公司12个月中,两项不同业务的销售额变化,可以看到,效果还是非常不错的. 下面,我们开始介绍如何使用andbase实现这个效

Morris.js和flot绘制折线图的比较

[文章摘要] 最近用开源的AdminLTE做框架感觉效果特别好,其针对图表库Morris.js和flot都提供了不错的支持,也都提供了这两者的例子.不过Morris.js是基于Raphael.js来的,也就是其使用SVG和VML来绘制图形,而flot则是使用Canvas进行绘制,在绘制效率和浏览器兼容性等方面会有出入,同时两者需要的数据格式也不相同.本文中对两者的使用和性能进行了比较. [文章索引] Morris.js的使用 flot的使用 性能比较 [一.Morris.js的使用] Morri

canvas绘制折线图

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <canvas id="ca" width="300" height="300"></canvas

Android自定义组件系列【9】——Canvas绘制折线图

有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了很多插件,但是很多时候我们需要根据具体项目自定义这些图表,这一篇文章我们一起来看看如何在Android中使用Canvas绘制折线图.先看看绘制的效果: 实现原理很简单,我就直接给出代码: package com.example.testcanvasdraw; import java.util.ArrayList; import java.util.List; import java.util.Random; impo

[转]用Matplotlib绘制 折线图 散点图 柱状图 圆饼图

Matplotlib是一个Python工具箱,用于科学计算的数据可视化.借助它,Python可以绘制如Matlab和Octave多种多样的数据图形. 安装 Matplotlib并不是Python的默认组件,需要额外安装. 官方下载地址 http://matplotlib.org/downloads.html 必须下载与自己的Python版本,操作系统类型对应的安装包.如Windows 64位+Python3.3,应该下载matplotlib-1.3.1.win-amd64-py3.3.exe 第

Android 自定义绘制折线图(重点是Y轴的公式)

/** * 绘制折线图的公式Y轴坐标: y=height-((data-min)/(max-min))*height; 可以得到data在Y轴的坐标点 * height: 折线图 Y轴的坐标 * data: 数据源 * max: 数据源的最大值 * min: 数据源的最小值 * * */ /** * 绘制折线图: y轴左侧的数据 * * 1.根据需求 :显示几个数据 height/显示个数(平均分配Y轴) * 2.左侧数据: Y轴的顶部:数据源max值 Y轴的底部:数据源的min值 中间数据:取