`
远去的渡口
  • 浏览: 472998 次
  • 性别: Icon_minigender_2
  • 来自: 上海转北京
社区版块
存档分类
最新评论

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的包含的属性:

int userId;
	String bpDate;
	String bpTime;
	int syspress;  //收缩压(mmHg)
	int diapress; //舒张压(mmHg)

 

2、加载数据集

public static TimeSeriesCollection createTimeSeries(
			List<PressureBean> list, int dayOrweekOrmonth, Log log, String shou,String shu
			) {

		TimeSeriesCollection timesers = new TimeSeriesCollection();

		int mon = 1;
		int day = 1;
		int ye = 2000;
		int week = 1;

		// 按天显示
		if (dayOrweekOrmonth == 0) {

			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(0, 4));
				mon = Integer.parseInt(date.substring(5, 7));
				day = Integer.parseInt(date.substring(8, date.length()));
				Day days = new Day(day, mon, ye);

				double sys = pres.getSyspress();
				double dia = pres.getDiapress();
				if (sys != -1 && sys > 0) {
					timeseries.add(days, sys);
				} else {
					timeseries1.add(days, null);
				}
				if (sys != -1 && sys > 0) {
					timeseriedia.add(days, dia);
				} else {
					timeseriedia1.add(days, null);
				}

			}

			timesers.addSeries(timeseries);
			timesers.addSeries(timeseriedia);
			timesers.addSeries(timeseries1);
			timesers.addSeries(timeseriedia1);

		} else if (dayOrweekOrmonth == 1) {//按周显示
			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 == 2) {
					ye = Integer.parseInt(spls[0]);
					mon = Integer.parseInt(spls[1]);
				} 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 != -1 && sys > 0) {
					timeseries.add(days, sys);
				} else {
					timeseries1.add(days, null);
				}
				if (sys != -1 && sys > 0) {
					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 == 2) {
					ye = Integer.parseInt(spls[0]);
					mon = Integer.parseInt(spls[1]);
				} 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 != -1 && sys > 0) {
					timeseries.add(days, sys);
				} else {
					timeseries1.add(days, null);
				}
				if (sys != -1 && sys > 0) {
					timeseriedia.add(days, dia);
				} else {
					timeseriedia1.add(days, null);
				}

			}
			timesers.addSeries(timeseries);
			timesers.addSeries(timeseriedia);
			timesers.addSeries(timeseries1);
			
			timesers.addSeries(timeseriedia1);

		}

		return timesers;
	}

 

 

3、画折线图,两个数据集,收缩压和舒张压,并且,这两条曲线还各自包含一个区域范围,并不单单是一条基准线,而是一个基准范围

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 = 0;
		double addmax = 50;
		double min = 40;

		if (list != null && list.size() > 0) {
			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 -= 10;


			log.info("high press value is =" + maxpress);

		}
		
		if (xydataset != null) {
			int counts = xydataset.getItemCount(0);
			if (counts == 0) {
				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(102, 102, 102));
		jfreechart.setTitle(text);
		XYPlot xyplot = jfreechart.getXYPlot();
		xyplot.setBackgroundPaint(new Color(255, 253, 246));
		xyplot.setOutlineStroke(new BasicStroke(1.5f)); // 边框粗细
		ValueAxis vaxis = xyplot.getDomainAxis();
		vaxis.setAxisLineStroke(new BasicStroke(1.5f)); // 坐标轴粗细
		vaxis.setAxisLinePaint(new Color(215, 215, 215)); // 坐标轴颜色
		xyplot.setOutlineStroke(new BasicStroke(1.5f)); // 边框粗细
		vaxis.setLabelPaint(new Color(10, 10, 10)); // 坐标轴标题颜色
		vaxis.setTickLabelPaint(new Color(102, 102, 102)); // 坐标轴标尺值颜色
		vaxis.setLowerMargin(0.06d);// 分类轴下(左)边距
		vaxis.setUpperMargin(0.14d);// 分类轴下(右)边距,防止最后边的一个数据靠近了坐标轴。
		
		//X轴为日期格式,这里是专门的处理日期的类,
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		DateAxis dateaxis = (DateAxis) xyplot.getDomainAxis();
		if (weekOrmonth == 0) {//以天为刻度,时间格式为yyyy-MM-dd,如2008-02-06
			dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.DAY, 1, format));
		} else if (weekOrmonth == 1) {//以周为刻度,时间显示为 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, 7, format));
		} else if (weekOrmonth == 2) {//以月为刻度,时间显示为09-02 (09年2月)
			format = new SimpleDateFormat("yy-MM");
			dateaxis
					.setTickUnit(new DateTickUnit(DateTickUnit.MONTH, 1, format));

		}
		dateaxis.setVerticalTickLabels(false); // 设为true表示横坐标旋转到垂直。
		if (searchby == 6 || searchby == 3) {
			dateaxis.setAutoTickUnitSelection(true); // 由于横轴标签过多,这里设置为自动格式 。
			dateaxis.setDateFormatOverride(format);
		}
		dateaxis.setTickMarkPosition(DateTickMarkPosition.START);

		ValueAxis valueAxis = xyplot.getRangeAxis();
		valueAxis.setUpperBound(maxpress);
		valueAxis.setAutoRangeMinimumSize(1);
		valueAxis.setLowerBound(min);
		valueAxis.setAutoRange(false);

		valueAxis.setAxisLineStroke(new BasicStroke(1.5f)); // 坐标轴粗细
		valueAxis.setAxisLinePaint(new Color(215, 215, 215)); // 坐标轴颜色
		valueAxis.setLabelPaint(new Color(10, 10, 10)); // 坐标轴标题颜色
		valueAxis.setTickLabelPaint(new Color(102, 102, 102)); // 坐标轴标尺值颜色
		
		xyplot.setRangeGridlinesVisible(true);
		xyplot.setDomainGridlinesVisible(true);
		xyplot.setRangeGridlinePaint(Color.LIGHT_GRAY);
		xyplot.setDomainGridlinePaint(Color.LIGHT_GRAY);
		xyplot.setBackgroundPaint(new Color(255, 253, 246));
		xyplot.setNoDataMessage(nodatamess);//没有数据时显示的文字说明。
		xyplot.setNoDataMessageFont(new Font("", Font.BOLD, 14));//字体的大小,粗体。
		xyplot.setNoDataMessagePaint(new Color(87, 149, 117));//字体颜色
		xyplot.setAxisOffset(new RectangleInsets(0d, 0d, 0d, 5d)); //

		// add range marker(舒张压的区域marker,范围是从62到81)

		double lowpress = 62;
		double uperpress = 81;
		IntervalMarker intermarker = new IntervalMarker(lowpress, uperpress);
		intermarker.setPaint(Color.decode("#66FFCC"));// 域顏色
		
		intermarker.setLabelFont(new Font("SansSerif", 41, 14));
		intermarker.setLabelPaint(Color.RED);
		intermarker.setLabel(bp_shuzhang);

		if (xydataset != null) {
			xyplot.addRangeMarker(intermarker, Layer.BACKGROUND);
		}
    //(收缩压的区域marker,范围是从102到120)
		double lowpress1 = 102;
		double uperpress1 = 120;
		IntervalMarker inter = new IntervalMarker(lowpress1, uperpress1);
		inter.setLabelOffsetType(LengthAdjustmentType.EXPAND);
		inter.setPaint(Color.decode("#66FFCC"));// 域顏色


		inter.setLabelFont(new Font("SansSerif", 41, 14));
		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(0, new Color(127, 128, 0));
		xylineandshaperenderer.setSeriesPaint(0, new Color(127, 128, 0));

		xylineandshaperenderer.setSeriesShapesVisible(0, true);
		xylineandshaperenderer.setSeriesShapesVisible(1, true);

		//第二条折线的颜色
		xylineandshaperenderer.setSeriesFillPaint(1, new Color(254, 103, 0));
		xylineandshaperenderer.setSeriesPaint(1, new Color(254, 103, 0));
		xylineandshaperenderer.setSeriesShapesVisible(1, true);
		xylineandshaperenderer.setSeriesVisible(2, false);//
		xylineandshaperenderer.setSeriesVisible(3, false);//不显示下面标题

		//折线的粗细调
		StandardXYToolTipGenerator xytool = new StandardXYToolTipGenerator();
		xylineandshaperenderer.setToolTipGenerator(xytool);
		xylineandshaperenderer.setStroke(new BasicStroke(1.5f));

		// 显示节点的值
		xylineandshaperenderer.setBaseItemLabelsVisible(true);
		xylineandshaperenderer
				.setBasePositiveItemLabelPosition(new ItemLabelPosition(
						ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
		xylineandshaperenderer
				.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
		xylineandshaperenderer.setBaseItemLabelPaint(new Color(102, 102, 102));// 显示折点数值字体的颜色

		return jfreechart;
	}

 
4、将图片URL返回到页面

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, 650, 280, 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);

	}

 

效果图如下:

以天为刻度:

以周为刻度:

以月为刻度:

15
1
分享到:
评论
24 楼 sophia2046234 2013-08-07  
您好,我现在运用jxl读excel数据,jfreechart生成图表
但是遇到了以下几个问题:
1:因为我横轴是时间,所以我用了折线图来画,但是时间点有重复的,所以图不能显示完全:
2:因为有两条曲线,但是纵轴刻度不同,想设置两个纵轴,但是现在设置的是两个相同的纵轴,不知道怎么对第二个纵轴进行修改,由于刚刚接触jfreechart一天不到,理解什么都谈不上,请您多多指教~~~
23 楼 远去的渡口 2013-05-09  
liyunxin0534 写道
按月显示有问题啊

是什么问题呢,没显示全?还是排序不对?
貌似我当年做这个图按月显示还没有出现过问题,难道API规则变了,哈哈,因为时代很久远啦
22 楼 远去的渡口 2013-05-09  
偷溜的梦想 写道
请问:
format = new SimpleDateFormat("yyyy" + year + index + "w" + week);     dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.DAY, 7, format)); 
半年多没上这个网站,才看到,晚了太久,呵呵,想必问题已经解决了吧,还是回复一下,给后面的网友参考一下。
这里面的year、index、week是什么呀,这时候我应该不知道是那一年的第几周?

year表示年份,这个是从数据库得来的数字,我这里是提前放到year变量中了。
index是“第”这个字的字符串,因为要同时支持简体中文,英文,繁体中文,所以只要是文字描述部分都得用变量表示了,在配置文件里面写三种语言的unicode码。
week和year一样,是表示周的变量。
连起来,图片中的“2009年第22周”就是这些拼出来的效果了。
21 楼 liyunxin0534 2013-02-27  
按月显示有问题啊
20 楼 偷溜的梦想 2013-01-23  
请问:
format = new SimpleDateFormat("yyyy" + year + index + "w" + week);     dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.DAY, 7, format)); 
里面的year、index、week是什么呀,这时候我应该不知道是那一年的第几周?
19 楼 zsp1202 2011-12-23  
搞定了,去掉writeImageMap()就好了    
18 楼 zsp1202 2011-12-23  
好像以前的老版本时序图会有这个BUG,貌似新版本解决了,但是现在还是用1.0.4(唉。。。)后来改折线图实现了,把数据格式和画图部分重新做了,但是问题来了。。。图显示没问题了,以设置tip就报这个Cannot forward after response has been committed   唉,当时用JFreeChart还不如用Ext呢  那图比这个炫多了
17 楼 远去的渡口 2011-12-21  
zsp1202 写道
数据量大的时候按天显示数字会叠在一起(竖着显示日期也重叠),很郁闷。。。怎么能把图修改成显示15个点,点和点之间的距离相等(也就是把X轴划分成15份)  然后日期再竖着显示

你去API里查找一下,我之前实现的好象是按比例缩放的,因为时间跨度不同,选择的起始时间不同,如果横轴是日期类型,接口里面封装的方法已经实现了按比例缩放了。如果是string类型,那就比较麻烦了。
16 楼 远去的渡口 2011-12-21  
zsp1202 写道
08k311(你懂得!哈哈。。。),唉,我正在改你的代码。。。以前没用过   昏了!

哈哈,不是吧,这么巧,我写的代码还比较工整了,注释都还算完整啦,嘿嘿。我现在快两年没有碰JSP了,现在前端用的是Flex,其实JfreeChart展示的样子挺难看的。现在还在升级这一模块么?其实反反复复也没啥意思,那时脾气被这JfreeChart给锻炼出来了。。。你加油吧~
15 楼 zsp1202 2011-12-16  
数据量大的时候按天显示数字会叠在一起(竖着显示日期也重叠),很郁闷。。。怎么能把图修改成显示15个点,点和点之间的距离相等(也就是把X轴划分成15份)  然后日期再竖着显示
14 楼 zsp1202 2011-12-16  
08k311(你懂得!哈哈。。。),唉,我正在改你的代码。。。以前没用过   昏了!
13 楼 远去的渡口 2011-12-09  
hllf123 写道
如果折线图上拐点显示数据会出现逗号 也就是:48,580  怎么去掉这个逗号呢

你可以找一下数字格式转换的方法,就象format等方法用来处理格式,应该可以找到的
12 楼 hllf123 2011-12-06  
如果折线图上拐点显示数据会出现逗号 也就是:48,580  怎么去掉这个逗号呢
11 楼 lsyx71387 2011-09-05  
写的很好啊!感谢!
10 楼 远去的渡口 2011-07-27  
X轴
zhangzi 写道
dateaxis.setVerticalTickLabels(true); 

这样只能设置X轴日期垂直显示。
怎么才能倾斜多少度显示啊?我找了好久都没找到。


现在好久没看有关JfreeChart了,我现在主要从事Flex了,画图也是用Flex里的工具类,呵呵。不过记得我实现过倾斜一个角度,大致是这样子吧,关键是设置dateaxis的一些方法调用,下面是个例子,具体的哪一个方法,你再自己找找看。
CategoryAxis categoryaxis = categoryplot.getDomainAxis(); //横轴上的 Lable 45度倾斜
categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
9 楼 zhangzi 2011-07-21  
dateaxis.setVerticalTickLabels(true); 

这样只能设置X轴日期垂直显示。
怎么才能倾斜多少度显示啊?我找了好久都没找到。
8 楼 远去的渡口 2011-05-26  
seoltsubasa 写道
渡口姐姐:
    这个问题已经解决了哈,我用的lineChart。在X轴上自己写算法实现我想要的日期显示,谢谢你哈!以后多交流!呵呵。

不错!
7 楼 seoltsubasa 2011-05-16  
渡口姐姐:
    这个问题已经解决了哈,我用的lineChart。在X轴上自己写算法实现我想要的日期显示,谢谢你哈!以后多交流!呵呵。
6 楼 远去的渡口 2011-05-09  
seoltsubasa 写道
你好,渡口姐姐:
     我遇到个问题,是关于按周显示的,希望您能告诉该怎么解决。
     问题是这样的:
     用如下XYDataset数据集生成Chart,
时间轴,即:横轴,X轴是这样显示的,01-2010 02-2011 03-2011......08-2011

时间轴的第一个刻度应该显示01-2011才对啊,还有就是09-2011在时间轴上也显示不出来,不知道是怎么回事。另外,由于数据里面的时间点不是连续的,但是在横轴上要求时间连续,又该怎么实现呢?

谢谢你了哈,渡口姐姐


Java code

//生成XYDataset数据集
..........
TimeSeries ts=new TimeSeries("test",org.jfree.data.time.Week.class);

ts.add(new Week(1, 2011), 181.80000000000001D);
ts.add(new Week(2, 2011), 181.80000000000001D);
ts.add(new Week(3, 2011), 167.30000000000001D);
ts.add(new Week(4, 2011), 153.80000000000001D);
ts.add(new Week(5, 2011), 167.59999999999999D);
ts.add(new Week(6, 2011), 158.80000000000001D);
ts.add(new Week(7, 2011), 148.30000000000001D);
ts.add(new Week(8, 2011), 153.90000000000001D);
ts.add(new Week(9, 2011), 142.69999999999999D);

TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
timeseriescollection.addSeries(ts);
........... ...........
//格式化DateAxis时间轴显示日期格式
...........
DateFormat format = new SimpleDateFormat("ww-yyyy"); DateAxis dateAxis = (DateAxis) xyplot.getDomainAxis(); dateAxis.setTickUnit(new DateTickUnit(DateTickUnitType.DAY, 7, format));


不好意思,之前没有看到这个提问,不知道你现在解决了没有。我猜想是不是因为你没有设置对有关日期的参数,比如,在计算某一天是这一年的第几个周,都要设置哪一天算是一周的第一天,这是我的个人看法,你可以先试一下。以后多多交流。
5 楼 seoltsubasa 2011-04-26  
你好,渡口姐姐:
     我遇到个问题,是关于按周显示的,希望您能告诉该怎么解决。
     问题是这样的:
     用如下XYDataset数据集生成Chart,
时间轴,即:横轴,X轴是这样显示的,01-2010 02-2011 03-2011......08-2011

时间轴的第一个刻度应该显示01-2011才对啊,还有就是09-2011在时间轴上也显示不出来,不知道是怎么回事。另外,由于数据里面的时间点不是连续的,但是在横轴上要求时间连续,又该怎么实现呢?

谢谢你了哈,渡口姐姐


Java code

//生成XYDataset数据集
..........
TimeSeries ts=new TimeSeries("test",org.jfree.data.time.Week.class);

ts.add(new Week(1, 2011), 181.80000000000001D);
ts.add(new Week(2, 2011), 181.80000000000001D);
ts.add(new Week(3, 2011), 167.30000000000001D);
ts.add(new Week(4, 2011), 153.80000000000001D);
ts.add(new Week(5, 2011), 167.59999999999999D);
ts.add(new Week(6, 2011), 158.80000000000001D);
ts.add(new Week(7, 2011), 148.30000000000001D);
ts.add(new Week(8, 2011), 153.90000000000001D);
ts.add(new Week(9, 2011), 142.69999999999999D);

TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
timeseriescollection.addSeries(ts);
........... ...........
//格式化DateAxis时间轴显示日期格式
...........
DateFormat format = new SimpleDateFormat("ww-yyyy"); DateAxis dateAxis = (DateAxis) xyplot.getDomainAxis(); dateAxis.setTickUnit(new DateTickUnit(DateTickUnitType.DAY, 7, format));

相关推荐

    jfreechart 折线图的一个例子

    **JFreeChart 折线图实例详解** JFreeChart 是一个强大的 Java 图形库,它提供了丰富的图表类型,包括折线图、柱状图、饼图等,适用于各种数据分析和展示场景。在这个例子中,我们将深入探讨如何使用 JFreeChart ...

    jfreechart折线图demo

    在这个“jfreechart折线图demo”中,我们将深入探讨如何使用 JFreeChart 创建和展示折线图。 1. **JFreeChart 概述** JFreeChart 提供了一套完整的 API,使得开发者可以方便地生成高质量的静态图表,并能轻松地将...

    jfreechart 折线图 应用

    该程序为main 函数,定义了三个方法,分别是jfreechart三种实现折线图的类型,返回的是一个chart 本程序是把图片保存到本地,当然实际应用中,只要在程序和页面中做相关配置即可以使用。 因为图片带点透明,所以...

    jfreechart折线图读取数据库数据的显示(mysql)

    在Java编程环境中,JFreeChart库是一个非常强大的工具,用于创建各种类型的图表,包括折线图、柱状图、饼图等。本教程将详细讲解如何利用JFreeChart结合MySQL数据库来生成动态折线图,展示数据库中的数据。 首先,...

    jfreechart折线图.zip

    ValueStack vs=(ValueStack)request.getAttribute("struts.valueStack"); List list=(List)vs.findValue("list"); Iterator itor=list.iterator(); while(itor.hasNext()) { ... &lt;%} %&gt;

    jfreechart 漂亮的折线图

    利用jfreechart绘制的漂亮的折线图,实现双纵坐标,折线点标签还带箭头指示,非常直观,需要提前下载jfreechart.jar文件,否则我的类会报错,也即是要配置运行环境

    JFreeChart 折线、柱状组合图

    public JFreeChart createChart(String Ytitle, String title, CategoryDataset lineData, CategoryDataset barData) { //参考附件 return chart; } //struts 部分 &lt;!--begin 维优特例 --&gt; ...

    JSP利用JFreeChart生成折线图

    在Java Web开发中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而JFreeChart则是一个强大的Java图表库,能够帮助开发者生成各种复杂的图表,包括折线图。本教程将详细介绍如何在JSP中利用JFreeChart库来...

    jfreechart 堆栈柱状图跟折线图结合拼接

    jfreechart 堆栈柱状图跟折线图结合拼接 jar包请戳http://download.csdn.net/detail/a156435646/7424707

    JFreeChart折线图的生成方法

    JFreeChart折线图的生成方法 JFreeChart是一款功能强大且广泛使用的图表类库,它可以生成多种类型的图表,如饼图、柱状图、散点图、时序图、甘特图等等。今天,我们将详细介绍JFreeChart折线图的生成方法。 首先,...

    JFreeChart饼图、折线图等资料学习

    JFreeChart是一款强大的Java图形库,它允许开发者创建多种类型的图表,包括饼图、折线图、柱状图、散点图以及更多其他类型的图表。这个资料包包含了JFreeChart的核心库(jfreechart-1.0.16.jar)和其依赖库JCommon...

    JFreeChart双Y轴折线图实例,可以直接运行

    JFreeChart双Y轴折线图实例,可以直接运行,实例类为LineChartDemo1.JAVA,有注释。 若想在web工程使用只需如下。 String filename = ServletUtilities.saveChartAsPNG(jfreechart, 600, 400, null, session); ...

    jfreechart 折线图、饼状图、柱状图

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的图表,包括折线图、饼状图和柱状图等,这些图表广泛应用于数据分析、报表展示以及Web应用程序中。本项目提供了一个实例,展示了如何在Web页面上使用...

    jfreechart根据24小时数据画折线图

    ### jfreechart根据24小时数据画折线图 #### 一、jfreechart简介 jfreechart是一款基于Java的开源图表绘制库,它能够帮助开发者轻松地在应用程序中生成各种图表,包括折线图、饼图、柱状图等。它的主要优势在于...

    jfreechart绘制折线图(平面和3D)

    JFreeChart是一款强大的Java图形库,它允许开发者创建多种类型的图表,包括折线图、柱状图、饼图、散点图等。在本主题中,我们将深入探讨如何使用JFreeChart来绘制平面和3D的折线图。 首先,让我们了解折线图的基本...

    jfreechart 生成折线图,饼图,柱状图,堆栈柱状图

    JFreeChart 是一个开源的Java库,用于生成高质量的2D图表,如折线图、饼图、柱状图和堆栈柱状图等。它广泛应用于数据分析、报告和应用程序中,提供丰富的自定义选项来满足各种视觉需求。在本项目中,你将找到能够...

    java JXL导入导出Excel源码及jfreechart 生成折线图,饼图

    java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图

    JFreeChart 让X轴的标题竖着显示

    在Java编程环境中,JFreeChart库是一个非常强大的工具,用于创建各种类型的图表,如柱状图、饼图、线图等。如果你需要让X轴的标题在图表中竖直显示,而不是默认的水平显示,这通常是为了更好地适应有限的空间或者...

    jfreechart绘制的风速风向玫瑰图

    jfreechart是Java中一个流行的图表库,它提供了许多种类的图表,包括柱状图、折线图、饼图、雷达图等。本文主要介绍如何使用jfreechart绘制风速风向玫瑰图。 首先,了解jfreechart的基本结构。jfreechart的核心是...

Global site tag (gtag.js) - Google Analytics