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

JfreeChart 散点图,加了区域范围说明

阅读更多

用JfreeChart画散点图,查看JfreeChart的Demo,写的都挺复杂的,关键是Demo中把简单的事情复杂化了,比如展示的例子是一个正弦曲线什么的,让初次画散点图的我们摸不着头脑。关键是他们得到数据集搞得太过复杂,后来想明白了,不就是二维数组嘛。想通了这一点,一切问题都解决了,不过,对于我们项目的特殊要求,并不是只画几个点那么简单,还要加上区域范围与文字说明,在查看文档及自己摸索下,2天时间,终于搞定。下面分享一下成果,呵,还是有点成就感的。

 首先,看画图的API,参数有:

ChartFactory.createScatterPlot(),其中,有一个xydataset,那么,我们先要知道这个xydataset是什么结构的,再看所需xydataset,散点图,也就是单独画出点,也就是一个二维数据了,x ,y坐标嘛!

那么,先做好准备工作,第一步,拿数据,这就不用啰嗦了,就是得到一个List也好,Set也行。

第二步,加载到数据集:

/**
 * 
 * @param xydatalist
 * @param bloods
 * @return
 */
	public static XYDataset createxydataset(List<PressureBean> xydatalist,
			String bloods) {
		DefaultXYDataset xydataset = new DefaultXYDataset();

		int size = xydatalist.size();
		double[][] datas = new double[2][size];
		for (int i = 0; i < size; i++) {
			PressureBean pres = xydatalist.get(i);
			int sys = pres.getSyspress();//收缩压
			int dia = pres.getDiapress();//舒张压

			datas[0][i] = sys;
			datas[1][i] = dia;
		}

		xydataset.addSeries(bloods, datas);

		return xydataset;

	}

 

下一步,另外一个准备工作,画图方法:

public static JFreeChart createChart(XYDataset xydataset,
			String bloodcattile, String shou, String shu, String nobloodData,
			String bloods, String nomal, String fore, String one, String two,
			List<PressureBean> list, Log log) {

		// 有可能用户在后面的版本中故意输入不正常数值,但是为了保证图片画图的完整,这里先计算
		// 用户血压值的最大值。
		int maxpress = 160;
		int addmax = 20;

		if (list != null && list.size() > 0) {

			Iterator<PressureBean> it = list.iterator();
			while (it.hasNext()) {
				PressureBean pres = it.next();
				
				if (maxpress < pres.getDiapress()) {
					maxpress = pres.getDiapress();
				}

				if (maxpress < pres.getSyspress()) {
					maxpress = pres.getSyspress();
				}
			}

			maxpress += addmax;


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

		}

		JFreeChart jfreechart = ChartFactory.createScatterPlot(bloodcattile,
				shou, shu, xydataset, PlotOrientation.VERTICAL, true, false,
				false);
		jfreechart.setBackgroundPaint(Color.white);
		jfreechart.setBorderPaint(Color.GREEN);
		jfreechart.setBorderStroke(new BasicStroke(1.5f));
		XYPlot xyplot = (XYPlot) jfreechart.getPlot();
		xyplot.setNoDataMessage(nobloodData);
		xyplot.setNoDataMessageFont(new Font("", Font.BOLD, 14));
		xyplot.setNoDataMessagePaint(new Color(87, 149, 117));

		xyplot.setBackgroundPaint(new Color(255, 253, 246));
		ValueAxis vaaxis = xyplot.getDomainAxis();
		vaaxis.setAxisLineStroke(new BasicStroke(1.5f));

		ValueAxis va = xyplot.getDomainAxis(0);
		va.setAxisLineStroke(new BasicStroke(1.5f));

		va.setAxisLineStroke(new BasicStroke(1.5f)); // 坐标轴粗细
		va.setAxisLinePaint(new Color(215, 215, 215)); // 坐标轴颜色
		xyplot.setOutlineStroke(new BasicStroke(1.5f)); // 边框粗细
		va.setLabelPaint(new Color(10, 10, 10)); // 坐标轴标题颜色
		va.setTickLabelPaint(new Color(102, 102, 102)); // 坐标轴标尺值颜色
		ValueAxis axis = xyplot.getRangeAxis();
		axis.setAxisLineStroke(new BasicStroke(1.5f));

		XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) xyplot
				.getRenderer();
		xylineandshaperenderer.setSeriesOutlinePaint(0, Color.WHITE);
		xylineandshaperenderer.setUseOutlinePaint(true);
		NumberAxis numberaxis = (NumberAxis) xyplot.getDomainAxis();
		numberaxis.setAutoRangeIncludesZero(false);
		numberaxis.setTickMarkInsideLength(2.0F);
		numberaxis.setTickMarkOutsideLength(0.0F);
		numberaxis.setAxisLineStroke(new BasicStroke(1.5f));
		numberaxis.setUpperBound(maxpress);
		numberaxis.setLowerBound(60);//最小值设置为60
		NumberAxis numberaxis1 = (NumberAxis) xyplot.getRangeAxis();
		numberaxis1.setTickMarkInsideLength(2.0F);
		numberaxis1.setTickMarkOutsideLength(0.0F);
		numberaxis1.setUpperBound(105d);
		numberaxis1.setLowerBound(35);
		numberaxis1.setAxisLineStroke(new BasicStroke(1.5f));

		// if (xydataset != null) {
		XYBoxAnnotation box = new XYBoxAnnotation(0, 0, 89, 59); //正常血压所在区域内边界
		XYBoxAnnotation box1 = new XYBoxAnnotation(0, 0, 119, 79);//高血压前期所在区域内边界
		XYBoxAnnotation box2 = new XYBoxAnnotation(0, 0, 139, 89);//高血压一期所在区域内边界
		XYBoxAnnotation box3 = new XYBoxAnnotation(0, 0, 159, 99);//高血压二期所在区域内边界
		XYTextAnnotation text1 = new XYTextAnnotation(nomal, 70, 62.5);//标识“正常”
		XYTextAnnotation text = new XYTextAnnotation(fore, 70, 82.5);//“高血压前期”
		XYTextAnnotation text2 = new XYTextAnnotation(one, 70, 91.5);//“高血压一期”
		XYTextAnnotation text3 = new XYTextAnnotation(two, 70, 101.5);//“高血压二期”

		
		//将上面的边界线条,说明文字加入到xyplot中。
		xyplot.addAnnotation(box);
		xyplot.addAnnotation(box1);
		xyplot.addAnnotation(box2);
		xyplot.addAnnotation(box3);

		xyplot.addAnnotation(text);
		xyplot.addAnnotation(text1);
		xyplot.addAnnotation(text2);
		xyplot.addAnnotation(text3);
		// }
		return jfreechart;
	}

 

最后一步,返回图片URL

public static void drawScatterChart(IrisIoInterface io, Log log,
			XYDataset xydataSet, String title, String shou, String shu,
			String nodata, String boolds, String nomal, String fore,
			String one, String two, List<PressureBean> list) {

		JFreeChart chart = createChart(xydataSet, title, shou, shu, nodata,
				boolds, nomal, fore, one, two, list, log);

		HttpServletRequest request = io.getRequest();
		String filename = "";
		String graphURL = "";
		try {
			filename = ServletUtilities.saveChartAsPNG(chart, 400, 300, null,
					io.getSession());
			graphURL = request.getContextPath() + "/displayChart?filename="
					+ filename;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			log.error(e);
		}

		io.setData("filename", filename, BeanShare.BEAN_SHARE_REQUEST);
		io.setData("scatterurl", graphURL, BeanShare.BEAN_SHARE_REQUEST);

	}

 

效果图:

分享到:
评论

相关推荐

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

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

    jfreechart jsp 结合 折线图

    JFreeChart 是一个强大的Java图表库,它提供了丰富的图表类型,包括折线图、柱状图、饼图、散点图等,适用于多种数据可视化需求。在Web应用程序中,结合JSP(JavaServer Pages)技术,可以将动态生成的图表无缝地...

    JFreeChart 让X轴的标题竖着显示

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

    jfreechart柱状图、饼形图、折线图源码

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的2D图表,包括柱状图、饼形图和折线图。在这个压缩包文件中,包含的是基于JFreeChart库的源码示例,用于帮助理解和应用这些图表类型。下面我们将深入...

    jfreechart图形

    除了上述图表,JFreeChart还支持散点图、雷达图、甘特图、热力图等多种图表类型。这些图表适用于不同场景,如科学数据分析、项目管理、商业报告等。 6. **自定义与美化** JFreeChart的强大之处在于其高度的定制化...

    JFreeChart 各种图形的 web工程

    域状图(也称面积图)是在折线图基础上填充区域,用于强调数据的变化范围。`XYAreaChart`是生成域状图的主要类,它可以结合`AreaRenderer`来设置填充区域的颜色和透明度。 **5. 组合图表** JFreeChart支持将多种...

    JFreeChart-create-Line.rar_chart line 3D_java绘制折线图_jfreechart_坐标

    通过JFreeChart插件,既可以生成普通效果的折线图,也可以生成3D效果的折线图。如果想生成普通效果的折线图,需要通过工厂类ChartFactory的createLineChart()方法获得JFreeChart类的实例;如果想生成3D效果的折线图...

    jfreechart画折线图的方法

    jfreechart画折线图的方法 jfreechart是一款开放源代码的Java项目,提供了多种类型的图表,包括饼图、柱状图、线图、区域图、分布图、混合图、甘特图等等。应用jfreechart来画图需要两个jar包:jfreechart.jar和...

    java利用JFreeChart实现各类数据统计图柱形图饼图折线图.pdf

    Java 中可以使用 JFreeChart 库来实现各种数据统计图,如柱形图、饼图、折线图等。下面将详细介绍如何使用 JFreeChart 库实现数据统计图。 首先,需要添加三个第三方包到 Java 项目中,分别是 jfreechart-1.0.13....

    利用jFreeChart做曲线图、饼状图、柱状图

    例如,饼状图可以使用ChartFactory.createPieChart方法,折线图可以使用ChartFactory.createLineChart方法。 jFreeChart的使用 jFreeChart可以在Java项目中使用,需要引入jFreeChart的jar包。引入方法是:project ...

    JFreeChart图形控件

    区域图是在折线图的基础上填充了下方的面积,强调数值范围。它通常用于突出显示一段时间内数据的变化范围,比如在经济学中展示GDP的增长区间。 5. **时序图(Time Series Chart)** 时序图专门用于显示与时间相关...

    jfreechart-1.0.14

    void addRangeMarker(Marker marker,Layer layer) 给数据区加一个数值范围区域 PiePlot(Plot)类: void setDataset(PieDataset dataset) 数据区的1维数据表 void setIgnoreNullValues(boolean flag) 忽略无值的分类...

    jfreechart中文学习文档

    区域图与折线图类似,但在折线下方填充颜色以更直观地展示数据范围。JFreeChart 的区域图功能同样强大。 **2.9 差异图** 差异图展示了两个或多个数据系列之间的差异。JFreeChart 支持差异图的绘制,并允许自定义...

    JFreeChart饼图、柱状图等

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的高质量图表,如饼图、柱状图、线形图、散点图等。这个库在IT行业中被广泛应用于数据分析、报表生成以及各种可视化应用中。在给定的压缩包文件中,...

    JFreeChart绘图柱形_饼形_折线图源码

    从给定的代码片段来看,我们正在探讨的是如何使用JFreeChart库在Java环境中创建不同类型的图表,包括饼图和折线图。JFreeChart是一个开源的Java图表库,提供了丰富的API来绘制各种统计图表,如条形图、饼图、折线图...

    JFreeChart 1.0.9 开发文档

    JFreeChart支持基于分类数据集和XY数据集的折线图,可以根据需求进行高度定制。 **2.5 XY图** XY图是另一种类型的折线图,特别适用于展示两个变量之间的关系。JFreeChart提供了丰富的功能来创建和定制XY图。 **...

    jfreechart-作图 所有图形代码示例

    JFreeChart是一款强大的Java图表库,它为开发者提供了丰富的图表类型,如柱状图、饼图、线图、散点图、面积图等,适用于各种数据可视化需求。本示例集合包含了使用JFreeChart创建各种图形的代码实例,旨在帮助开发者...

    JAVA图表工具 jfreechart 源码加完整例子

    `JFreeChart`是一款强大的开源Java库,用于创建各种类型的图表,如柱状图、饼图、线图、散点图、甘特图等。它广泛应用于数据分析、报告生成以及GUI应用中,提供了丰富的API和自定义选项,使得开发者能够轻松地在Java...

    jfreechart绘图组件

    这个强大的工具能够帮助我们轻松地创建出复杂的报表图形,包括折线图、柱状图、饼图、散点图、甘特图等多种类型,满足数据可视化的各种需求。 ### JFreeChart 的主要特点 1. **多图表类型**:JFreeChart 支持多种...

Global site tag (gtag.js) - Google Analytics