使用JFreeChart怎么绘制一个光滑的曲线
本篇文章给大家分享的是有关使用JFreeChart怎么绘制一个光滑的曲线,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
成都创新互联是一家集网站制作、网站建设、网站页面设计、网站优化SEO优化为一体的专业网站建设公司,已为成都等多地近百家企业提供网站建设服务。追求良好的浏览体验,以探求精品塑造与理念升华,设计最适合用户的网站页面。 合作只是第一步,服务才是根本,我们始终坚持讲诚信,负责任的原则,为您进行细心、贴心、认真的服务,与众多客户在蓬勃发展的市场环境中,互促共生。
FittingCurve.java
package org.jevy; import java.util.ArrayList; import java.util.List; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; public class FittingCurve extends ApplicationFrame{ Listequation = null; //设置多项式的次数 int times = 2; public FittingCurve(String title) { super(title); //使用最小二乘法计算拟合多项式中各项前的系数。 /* 请注意: 多项式曲线参数计算 与 Chart图表生成 是分开处理的。 多项式曲线参数计算: 负责计算多项式系数, 返回多项式系数List。 Chart图表生成: 仅仅负责按照给定的数据绘图。 比如对给定的点进行连线。 本实例中,光滑的曲线是用密度很高的点连线绘制出来的。 由于我们计算出了多项式的系数,所以我们让X轴数据按照很小的步长增大,针对每一个X值,使用多项式计算出Y值, 从而得出点众多的(x,y)组。 把这些(x, y)组成的点连线绘制出来,则显示出光滑的曲线。 XYSeries为JFreeChart绘图数据集, 用于绘制一组有关系的数据。 XYSeries对应于X,Y坐标轴数据集, 添加数据方式为: XYSeries s.add(x,y); XYSeriesCollection 为XYSeries的集合, 当需要在一个Chart上绘制多条曲线的时候,需要把多条曲线对应的XYSeries添加到XYSeriesCollection 添加方法:dataset.addSeries(s1); dataset.addSeries(s2); */ //多项式的次数从高到低,该函数需要的参数:x轴数据 ,y轴数据
,多项式的次数<2> this.equation = this.getCurveEquation(this.getData().get(0),this.getData().get(1),this.times); //生成Chart JFreeChart chart = this.getChart(); ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new java.awt.Dimension(500, 270)); chartPanel.setMouseZoomable(true, false); setContentPane(chartPanel); } public static void main(String[] args) { // TODO Auto-generated method stub FittingCurve demo = new FittingCurve("XYFittingCurve"); demo.pack(); RefineryUtilities.centerFrameOnScreen(demo); demo.setVisible(true); } //生成chart public JFreeChart getChart(){ //获取X和Y轴数据集 XYDataset xydataset = this.getXYDataset(); //创建用坐标表示的折线图 JFreeChart xyChart = ChartFactory.createXYLineChart( "二次多项式拟合光滑曲线", "X轴", "Y轴", xydataset, PlotOrientation.VERTICAL, true, true, false); //生成坐标点点的形状 XYPlot plot = (XYPlot) xyChart.getPlot(); XYItemRenderer r = plot.getRenderer(); if (r instanceof XYLineAndShapeRenderer) { XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r; renderer.setBaseShapesVisible(false);//坐标点的形状是否可见 renderer.setBaseShapesFilled(false); } ValueAxis yAxis = plot.getRangeAxis(); yAxis.setLowerMargin(2); return xyChart; } //数据集按照逻辑关系添加到对应的集合 public XYDataset getXYDataset() { //预设数据点数据集 XYSeries s2 = new XYSeries("点点连线"); for(int i=0; i
list = this.equation; //获取预设的点数据 List > data = this.getData(); //get Max and Min of x; List
xList = data.get(0); double max =this.getMax(xList); double min = this.getMin(xList); double step = max - min; double x = min; double step2 = step/800.0; //按照多项式的形式 还原多项式,并利用多项式计算给定x时y的值 for(int i=0; i<800; i++){ x = x + step2; int num = list.size()-1; double temp = 0.0; for(int j=0; j > getData(){ //x为x轴坐标 List x = new ArrayList (); List y = new ArrayList (); for(int i=0; i<10; i++){ x.add(-5.0+i); } y.add(26.0); y.add(17.1); y.add(10.01); y.add(5.0); y.add(2.01); y.add(1.0); y.add(2.0); y.add(5.01); y.add(10.1); y.add(17.001); List > list = new ArrayList
>(); list.add(x); list.add(y); return list; } //以下代码为最小二乘法计算多项式系数 //最小二乘法多项式拟合 public List
getCurveEquation(List x, List y, int m){ if(x.size() != y.size() || x.size() <= m+1){ return new ArrayList (); } List result = new ArrayList (); List S = new ArrayList (); List T = new ArrayList (); //计算S0 S1 …… S2m for(int i=0; i<=2*m; i++){ double si = 0.0; for(double xx:x){ si = si + Math.pow(xx, i); } S.add(si); } //计算T0 T1 …… Tm for(int j=0; j<=m; j++){ double ti = 0.0; for(int k=0; k MatrixCalcu(double[][] d){ int i = d.length -1; int j = d[0].length -1; List list = new ArrayList (); double res = d[i][j]/d[i][j-1]; list.add(res); for(int k=i-1; k>=0; k--){ double num = d[k][j]; for(int q=j-1; q>k; q--){ num = num - d[k][q]*list.get(j-1-q); } res = num/d[k][k]; list.add(res); } return list; } //获取List中Double数据的最大最小值 public double getMax(List data){ double res = data.get(0); for(int i=0; i data){ double res = data.get(0); for(int i=0; i data.get(i+1)){ res = data.get(i+1); } } return res; } }
以上就是使用JFreeChart怎么绘制一个光滑的曲线,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。
网页名称:使用JFreeChart怎么绘制一个光滑的曲线
文章源于:http://ybzwz.com/article/jiespc.html