JfreeChart折线图 CSDN-李鹏飞
今天公司里分配给我的工作是JfreeChart折线图本人之前也没接触过如今让我们大家一起完毕!
在这个公司,用到了太多的JfreeChart,今天就对折线图作一个总结,希望对大家有点帮助,我这里直接是与业务逻辑相关的。业务须要的数据载入到数据集等,只是我会作一些凝视的,呵。之前有网友建议写凝视。
折线图,大可分为两种。
(1)X轴值类型为String的。
2)经常使用的是X轴值是日期的。而且,有时须要满足这种需求:
1、时间要连续。
2、时间能够设置固定的跨度。比方,2009-02-01,2009-02-04。2009-02-07……
3、因为时间跨度较大,想要做到不同精度的图表。如时间为10天时。以日(yyyy-MM-dd)格式为精度。时间跨度为2个月时。以周(如2009年第3周)为精度。跨度为6个月时,以月(2009年8月)为精度.
以下,针对照较复杂的(2)来解说:
1、取到业务逻辑须要的数据:(详细过程就不啰嗦了。就是查询数据库,得到想要的字段的值,载入到List里面) 返回List<PressureBean>
PressureBean的包括的属性:
Java代码
- int userId;
- String bpDate;
- String bpTime;
- int syspress; //收缩压(mmHg)
- int diapress; //舒张压(mmHg)
2、载入数据集
Java代码
- public static TimeSeriesCollection createTimeSeries(
- List<PressureBean> list, int dayOrweekOrmonth, Log log, String shou,String shu
- ) {
- TimeSeriesCollection timesers = new TimeSeriesCollection();
- int mon = ;
- int day = ;
- int ye = ;
- int week = ;
- // 按天显示
- if (dayOrweekOrmonth == ) {
- TimeSeries timeseries = new TimeSeries(shou,
- org.jfree.data.time.Day.class);
- TimeSeries timeseries1 = new TimeSeries("c1",
- org.jfree.data.time.Day.class);
- TimeSeries timeseriedia = new TimeSeries(shu,
- org.jfree.data.time.Day.class);
- TimeSeries timeseriedia1 = new TimeSeries("d1",
- org.jfree.data.time.Day.class);
- Iterator<PressureBean> it = list.iterator();
- while (it.hasNext()) {
- PressureBean pres = it.next();
- String date = pres.getBpDate();
- ye = Integer.parseInt(date.substring(, ));
- mon = Integer.parseInt(date.substring(, ));
- day = Integer.parseInt(date.substring(, date.length()));
- Day days = new Day(day, mon, ye);
- double sys = pres.getSyspress();
- double dia = pres.getDiapress();
- if (sys != - && sys > ) {
- timeseries.add(days, sys);
- } else {
- timeseries1.add(days, null);
- }
- if (sys != - && sys > ) {
- timeseriedia.add(days, dia);
- } else {
- timeseriedia1.add(days, null);
- }
- }
- timesers.addSeries(timeseries);
- timesers.addSeries(timeseriedia);
- timesers.addSeries(timeseries1);
- timesers.addSeries(timeseriedia1);
- } else if (dayOrweekOrmonth == ) {//按周显示
- TimeSeries timeseries = new TimeSeries(shou,
- org.jfree.data.time.Week.class);
- TimeSeries timeseries1 = new TimeSeries("c1",
- org.jfree.data.time.Week.class);
- TimeSeries timeseriedia = new TimeSeries(shu,
- org.jfree.data.time.Week.class);
- TimeSeries timeseriedia1 = new TimeSeries("d1",
- org.jfree.data.time.Week.class);
- Iterator<PressureBean> it = list.iterator();
- while (it.hasNext()) {
- PressureBean pres = it.next();
- String date = pres.getBpDate();
- String[] spls = date.split("-");
- if (spls.length == ) {
- ye = Integer.parseInt(spls[]);
- mon = Integer.parseInt(spls[]);
- } else {
- log.error("the date of weeks is wrong");
- }
- Week days = new Week(mon, ye);
- double sys = pres.getSyspress();
- double dia = pres.getDiapress();
- if (sys != - && sys > ) {
- timeseries.add(days, sys);
- } else {
- timeseries1.add(days, null);
- }
- if (sys != - && sys > ) {
- timeseriedia.add(days, dia);
- } else {
- timeseriedia1.add(days, null);
- }
- }
- timesers.addSeries(timeseries);
- timesers.addSeries(timeseriedia);
- timesers.addSeries(timeseries1);
- timesers.addSeries(timeseriedia1);
- } else {//按月显示
- TimeSeries timeseries = new TimeSeries(shou,
- org.jfree.data.time.Month.class);
- TimeSeries timeseries1 = new TimeSeries("c1",
- org.jfree.data.time.Month.class);
- TimeSeries timeseriedia = new TimeSeries(shu,
- org.jfree.data.time.Month.class);
- TimeSeries timeseriedia1 = new TimeSeries("s",
- org.jfree.data.time.Month.class);
- Iterator<PressureBean> it = list.iterator();
- while (it.hasNext()) {
- PressureBean pres = it.next();
- String date = pres.getBpDate();
- String[] spls = date.split("-");
- if (spls.length == ) {
- ye = Integer.parseInt(spls[]);
- mon = Integer.parseInt(spls[]);
- } else {
- log.error("the date of weeks is wrong");
- }
- Month days = new Month(mon, ye);
- double sys = pres.getSyspress();
- double dia = pres.getDiapress();
- if (sys != - && sys > ) {
- timeseries.add(days, sys);
- } else {
- timeseries1.add(days, null);
- }
- if (sys != - && sys > ) {
- timeseriedia.add(days, dia);
- } else {
- timeseriedia1.add(days, null);
- }
- }
- timesers.addSeries(timeseries);
- timesers.addSeries(timeseriedia);
- timesers.addSeries(timeseries1);
- timesers.addSeries(timeseriedia1);
- }
- return timesers;
- }
3、画折线图,两个数据集,收缩压和舒张压。而且,这两条曲线还各自包括一个区域范围,并不单单是一条基准线,而是一个基准范围
Java代码
- private static JFreeChart createChartPress(XYDataset xydataset,
- int weekOrmonth, String title, String y, String index, String week,
- String year, int searchby, String month, String nodatamess,
- List list, Log log, String bp_shou, String bp_shuzhang) {
- // 有可能用户在后面的版本号中有益输入不正常数值,可是为了保证图片绘图的完整,这里先计算
- // 用户血压值的最大值。
- double maxpress = ;
- double addmax = ;
- double min = ;
- if (list != null && list.size() > ) {
- Iterator<PressureBean> it = list.iterator();
- while (it.hasNext()) {
- PressureBean pres = it.next();
- double sys = pres.getSyspress();
- double dia = pres.getDiapress();
- if (maxpress < sys) {
- maxpress = sys;
- }
- if (maxpress < dia)
- maxpress = dia;
- if (min > sys) {
- min = sys;
- }
- if (min > dia)
- min = dia;
- }
- maxpress += addmax;
- min -= ;
- log.info("high press value is =" + maxpress);
- }
- if (xydataset != null) {
- int counts = xydataset.getItemCount();
- if (counts == ) {
- xydataset = null;
- }
- }
- JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(title, "",
- y, xydataset, true, true, false);
- jfreechart.setBackgroundPaint(Color.white);
- // 设置标题的颜色
- TextTitle text = new TextTitle(title);
- text.setPaint(new Color(, , ));
- jfreechart.setTitle(text);
- XYPlot xyplot = jfreechart.getXYPlot();
- xyplot.setBackgroundPaint(new Color(, , ));
- xyplot.setOutlineStroke(new BasicStroke(.5f)); // 边框粗细
- ValueAxis vaxis = xyplot.getDomainAxis();
- vaxis.setAxisLineStroke(new BasicStroke(.5f)); // 坐标轴粗细
- vaxis.setAxisLinePaint(new Color(, , )); // 坐标轴颜色
- xyplot.setOutlineStroke(new BasicStroke(.5f)); // 边框粗细
- vaxis.setLabelPaint(new Color(, , )); // 坐标轴标题颜色
- vaxis.setTickLabelPaint(new Color(, , )); // 坐标轴标尺值颜色
- vaxis.setLowerMargin(.06d);// 分类轴下(左)边距
- vaxis.setUpperMargin(.14d);// 分类轴下(右)边距,防止最后边的一个数据靠近了坐标轴。
- //X轴为日期格式,这里是专门的处理日期的类,
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
- DateAxis dateaxis = (DateAxis) xyplot.getDomainAxis();
- if (weekOrmonth == ) {//以天为刻度。时间格式为yyyy-MM-dd,如2008-02-06
- dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.DAY, , format));
- } else if (weekOrmonth == ) {//以周为刻度。时间显示为 2009年第4周((这里是SimpleDateFormat的使用方法,
- //这里为了作繁体版,英文版和简体版,用了国际化处理,将这些可变的资源在文字资源里面,注意一下。这里的y。M、w是SimpleDateFormat的关键字。
- //如英文表示09年第3周就是09W3,那么,这里的W须要用‘’引起来)
- format = new SimpleDateFormat("yyyy" + year + index + "w" + week);
- dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.DAY, , format));
- } else if (weekOrmonth == ) {//以月为刻度,时间显示为09-02 (09年2月)
- format = new SimpleDateFormat("yy-MM");
- dateaxis
- .setTickUnit(new DateTickUnit(DateTickUnit.MONTH, , format));
- }
- dateaxis.setVerticalTickLabels(false); // 设为true表示横坐标旋转到垂直。
- if (searchby == || searchby == ) {
- dateaxis.setAutoTickUnitSelection(true); // 因为横轴标签过多,这里设置为自己主动格式 。
- dateaxis.setDateFormatOverride(format);
- }
- dateaxis.setTickMarkPosition(DateTickMarkPosition.START);
- ValueAxis valueAxis = xyplot.getRangeAxis();
- valueAxis.setUpperBound(maxpress);
- valueAxis.setAutoRangeMinimumSize();
- valueAxis.setLowerBound(min);
- valueAxis.setAutoRange(false);
- valueAxis.setAxisLineStroke(new BasicStroke(.5f)); // 坐标轴粗细
- valueAxis.setAxisLinePaint(new Color(, , )); // 坐标轴颜色
- valueAxis.setLabelPaint(new Color(, , )); // 坐标轴标题颜色
- valueAxis.setTickLabelPaint(new Color(, , )); // 坐标轴标尺值颜色
- xyplot.setRangeGridlinesVisible(true);
- xyplot.setDomainGridlinesVisible(true);
- xyplot.setRangeGridlinePaint(Color.LIGHT_GRAY);
- xyplot.setDomainGridlinePaint(Color.LIGHT_GRAY);
- xyplot.setBackgroundPaint(new Color(, , ));
- xyplot.setNoDataMessage(nodatamess);//没有数据时显示的文字说明。
- xyplot.setNoDataMessageFont(new Font("", Font.BOLD, ));//字体的大小。粗体。
- xyplot.setNoDataMessagePaint(new Color(, , ));//字体颜色
- xyplot.setAxisOffset(new RectangleInsets(0d, 0d, 0d, 5d)); //
- // add range marker(舒张压的区域marker,范围是从62到81)
- double lowpress = ;
- double uperpress = ;
- IntervalMarker intermarker = new IntervalMarker(lowpress, uperpress);
- intermarker.setPaint(Color.decode("#66FFCC"));// 域顏色
- intermarker.setLabelFont(new Font("SansSerif", , ));
- intermarker.setLabelPaint(Color.RED);
- intermarker.setLabel(bp_shuzhang);
- if (xydataset != null) {
- xyplot.addRangeMarker(intermarker, Layer.BACKGROUND);
- }
- //(收缩压的区域marker。范围是从102到120)
- double lowpress1 = ;
- double uperpress1 = ;
- IntervalMarker inter = new IntervalMarker(lowpress1, uperpress1);
- inter.setLabelOffsetType(LengthAdjustmentType.EXPAND);
- inter.setPaint(Color.decode("#66FFCC"));// 域顏色
- inter.setLabelFont(new Font("SansSerif", , ));
- inter.setLabelPaint(Color.RED);
- inter.setLabel(bp_shou);
- if (xydataset != null) {
- xyplot.addRangeMarker(inter, Layer.BACKGROUND); // 加上Layer.BACKGROUND,将maker调到折线以下。
- }
- XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) xyplot
- .getRenderer();
- //第一条折线的颜色
- xylineandshaperenderer.setBaseItemLabelsVisible(true);
- xylineandshaperenderer.setSeriesFillPaint(, new Color(, , ));
- xylineandshaperenderer.setSeriesPaint(, new Color(, , ));
- xylineandshaperenderer.setSeriesShapesVisible(, true);
- xylineandshaperenderer.setSeriesShapesVisible(, true);
- //第二条折线的颜色
- xylineandshaperenderer.setSeriesFillPaint(, new Color(, , ));
- xylineandshaperenderer.setSeriesPaint(, new Color(, , ));
- xylineandshaperenderer.setSeriesShapesVisible(, true);
- xylineandshaperenderer.setSeriesVisible(, false);//
- xylineandshaperenderer.setSeriesVisible(, false);//不显示以下标题
- //折线的粗细调
- StandardXYToolTipGenerator xytool = new StandardXYToolTipGenerator();
- xylineandshaperenderer.setToolTipGenerator(xytool);
- xylineandshaperenderer.setStroke(new BasicStroke(.5f));
- // 显示节点的值
- xylineandshaperenderer.setBaseItemLabelsVisible(true);
- xylineandshaperenderer
- .setBasePositiveItemLabelPosition(new ItemLabelPosition(
- ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
- xylineandshaperenderer
- .setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
- xylineandshaperenderer.setBaseItemLabelPaint(new Color(, , ));// 显示折点数值字体的颜色
- return jfreechart;
- }
4、将图片URL返回到页面
Java代码
- public static void drawPressLineChart(IrisIoInterface io, Log log,
- TimeSeriesCollection timesers, int weekormonth, String title,
- String y, String index, String week, String year, int searchby,
- String month, String nodatamess, List list, String bp_shou,
- String bp_shuzhang) {
- JFreeChart chart = createChartPress(timesers, weekormonth, title, y,
- index, week, year, searchby, month, nodatamess, list, log,
- bp_shou, bp_shuzhang);
- HttpServletRequest request = io.getRequest();
- String filename = "";
- String graphURL = "";
- try {
- filename = ServletUtilities.saveChartAsPNG(chart, , , null,
- io.getSession());
- graphURL = request.getContextPath() + "/displayChart?filename="
- + filename;
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- log.error(e);
- }
- io.setData("filename1", filename, BeanShare.BEAN_SHARE_REQUEST);
- io.setData("presslineurl", graphURL, BeanShare.BEAN_SHARE_REQUEST);
- }
如有转载请注明出处:版权全部---李鹏飞 2014/6/3日
心情日志:听着歌写着博客!今天第一天进公司開始兴趣昂昂的走进公司!今天第一天上班公司经理就分配了工作但是框架都没熟悉又和在CSDN乐知学院学到的SSH框架不一样所以感慨道离开老师离开学校真的不习惯。
JfreeChart折线图 CSDN-李鹏飞的更多相关文章
- jfreechart折线图 demo
public class ChartUtil { public static ChartUtil chartUtil; private RoomViewsDataService roomViewsDa ...
- java利用JFreeChart实现各种数据统计图(柱形图,饼图,折线图)
最近在做数据挖掘的课程设计,需要将数据分析的结果很直观的展现给用户,这就要用到数据统计图,要实现这个功能就需要几个第三方包了: 1. jfreechart-1.0.13.jar 2. ...
- struts2整合JFreechart 饼图、折线图、柱形图
struts2整合JFreechart 饼图.折线图.柱形图 上效果图: 当然可以将数据导出图片格式存储.具体下的链接里的文件有保存成图片的操作. 因为是strust2整合JFreechart,所以s ...
- JFreeChart在制作折线图
JFreeChart在制作折线图的时候可以使用两种不同的方式 package Line; import java.awt.Color; import java.awt.Font; import org ...
- JFreeChart 图表生成实例(饼图、柱状图、折线图、时序图)
import java.awt.BasicStroke; import java.awt.Color; import java.io.FileOutputStream; import java.io. ...
- JFreeChart绘制折线图实例
JFreeChart是JAVA平台上的一个开放的第三方图表绘制类库.只要下载JFreeChart的类库,导入项目即可使用.下面是一个绘制折线图的实例.各处注释都已经写的比较清晰了. package c ...
- 使用jfreechart生成柱状图、折线图、和饼状图
JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计.下面我就详细介绍如 ...
- JFreeChart绘制XY折线图(工具类设计)
准备用Java写通信的仿真平台作为毕业设计,相比matlab绘图,Java绘图需要自己去写很多工具类,博主在这采用了JFreeChart的开源解决方案,摸索着自己写了一个XY折线图工具类,话不多说贴源 ...
- JFreeChart 之折线图
JFreeChart 之折线图 一.JFreeChart 简介 JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications, applets ...
随机推荐
- RHEL6.5上升级OpenSSH7.4p1
由于升级OpenSSH涉及到安全性问题,为保险起见,在升级前最好安装telnet服务作为备用方案,然后在升级成功后再停止telnet即可. 一.OpenSSH升级相关源码包下载地址 zlib htt ...
- 分离焦虑OR责任焦虑
这里是用小孩上幼儿园的事说分离焦虑,转念到成人身上就是责任焦虑. 这周小孩开始上幼儿园了,他很害怕家长离开,我能做的也不多,只是很肯定的告诉他,爸爸就在停车场,下学就来接你,然后从各个 ...
- 大数据学习——azkaban工作流调度系统
azkaban的安装部署 在/root/apps 1目录下新建azkaban文件夹 上传安装包到azkaban 2解压 .tar.gz 3删掉安装包 [root@mini1 azkaban]# .ta ...
- vim使用技巧二 模式
第一部分模式 第2章 普通模式 打开vim的默认状态即为普通模式 普通模式的命令强大 很大程度源于可以把操作符与动作命令结合在一起 技巧7 停顿时请移开画笔 工欲善其事,必先利其器 准 ...
- B. Balanced Lineup
B. Balanced Lineup Time Limit: 5000ms Case Time Limit: 5000ms Memory Limit: 65536KB 64-bit integer ...
- Leetcode 410.分割数组的最大值
分割数组的最大值 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小. 注意:数组长度 n 满足以下条件: 1 ≤ n ...
- Python --写excel
# -*- coding: UTF-8 -*- import xlwt import StringIO # 将数据保存成excel def write_data(data, tname): file ...
- 【bzoj4242】水壶 BFS+最小生成树+倍增LCA
题目描述 JOI君所居住的IOI市以一年四季都十分炎热著称. IOI市是一个被分成纵H*横W块区域的长方形,每个区域都是建筑物.原野.墙壁之一.建筑物的区域有P个,编号为1...P. JOI君只能进入 ...
- 【Luogu】P3856公共子串(DP)
题目链接 DP.设last[i][j]是第i个串字符'j'所在的最后的位置,f[i][j][k]是第一个串匹配到i,第二个串匹配到j,第三个串匹配到k,最多的公共子串数. 那么我们三重循环i.j.k, ...
- 刷题总结——分糖果(bzoj2330)
题目: Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖 ...