使用JFreeChart在网页上绘制平滑曲线

在做一个与细胞仿真有关的小软件时遇到了这个需求,最后选择了JFreeChart类库
百度百科关于JFreeChart的简介

用JFreeChart可以很轻松地画出很多种类常用的图形,如饼图、柱状图、折线图等,而绘制平滑曲线的功能是从版本1.0.7开始才增加的。

绘制平滑曲线的核心代码如下:

		XYSplineRenderer renderer = new XYSplineRenderer();
		renderer.setBaseShapesVisible(false); //绘制的线条上不显示图例,如果显示的话,会使图片变得很丑陋
		renderer.setSeriesPaint(0, Color.GREEN); //设置0号数据的颜色。这是手工设置线条颜色的方法
		renderer.setPrecision(5); //设置精度,大概意思是在源数据两个点之间插入5个点以拟合出一条平滑曲线
		 
		//create plot
		NumberAxis xAxis = new NumberAxis("Time(ns)");
		xAxis.setAutoRangeIncludesZero(false);
		NumberAxis yAxis = new NumberAxis("Voltage(mv)");
		yAxis.setAutoRangeIncludesZero(false);
		 
		XYPlot plot = new XYPlot(createDataset("D:/V.dat"), xAxis, yAxis, renderer);
		plot.setBackgroundPaint(Color.black);
		plot.setDomainGridlinePaint(Color.white);
		plot.setRangeGridlinePaint(Color.white);
		plot.setAxisOffset(new RectangleInsets(4, 4, 4, 4)); //设置坐标轴与绘图区域的距离
		 
		JFreeChart chart = new JFreeChart("细胞电压图", //标题
						JFreeChart.DEFAULT_TITLE_FONT, //标题的字体,这样就可以解决中文乱码的问题
						plot,
						false //不在图片底部显示图例
						);
		 
		//设置X轴的显示格式
		XYPlot   xyplot   =   chart.getXYPlot(); 
		xyplot.setForegroundAlpha(0.5f); 
        XYItemRenderer   renderer   =   xyplot.getRenderer(); 
        renderer.setToolTipGenerator( 
                new   StandardXYToolTipGenerator( 
                        StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT, 
                        new   SimpleDateFormat(yyyy-MM),   new   DecimalFormat( "0 ") 
                ) 
        ); 
        DateAxis   dateAxis   =   new   DateAxis( "时间 "); 
        dateAxis.setDateFormatOverride(new   SimpleDateFormat( "yyyy-MM ")); 
        dateAxis.setAutoRange(true); 
        dateAxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE); 
        xyplot.setDomainAxis(dateAxis); 
		
		ChartUtilities.writeChartAsPNG(response.getOutputStream(), chart, 1024, 768, null); 

 

下面是显示了有图例的图片,当点比较多时,图例会把生成的图片挤得非常ugly

下面是无图例的图片,由于图片上只画有一组数据,因此不需要用图例来区分不同的曲线。从图片效果来看,还是比较pretty的

完整的程序是一个servlet,需要配置好Tomcat或其他服务器才能运行。
实际上整个过程就是生成一个png图片,然后嵌入到网页中。

目前的问题是,程序只能生成静态的图片,不能产生与用户的交互性效果,比如鼠标移到曲线上某点,能显示出该点的坐标,暂时没有找到好的解决办法。

点击下载完整的程序和测试数据


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值