jfreechart折线图 开发实例

1.导包 jfreechart-1.0.10.jar 和jcommon-1.0.5 (不建议使用最新的包,否则会出现比较麻烦的乱码问题)

下面是一个显示报表的servlet

package cn.report.jfreechart;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.labels.StandardPieToolTipGenerator;
import org.jfree.chart.labels.StandardXYItemLabelGenerator;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.TextAnchor;

public class ChartServlet extends HttpServlet {
   
  String  equipment_id="";
 
 public void service(ServletRequest req, ServletResponse res)
    throws ServletException, IOException   
{
          res.setContentType("image/jpeg");
        equipment_id=req.getParameter("nodeId");
       // System.out.print(equipment_id);
       TimeSeriesCollection lineDataset = getDataSet();


 JFreeChart chart = ChartFactory.createTimeSeriesChart("", "日期2011",
   "产品良品率", lineDataset, true, true, true);

 // =============显示各数据点及其数值start====================
 XYPlot plot = (XYPlot) chart.getPlot();
 ValueAxis rangeAxis = plot.getRangeAxis();
 rangeAxis.setAxisLineStroke(new BasicStroke(2.0f));     // 设置轴线粗细
 rangeAxis.setAxisLinePaint(Color.BLACK);               // 设置轴线颜色
 rangeAxis.setUpperBound(100f);                        // 设置坐标最大值
 rangeAxis.setLowerBound(50f);
 
 //DateAxis cAxis = (DateAxis) plot.getDomainAxis();
 //cAxis.setAutoTickUnitSelection(false);


 XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) plot
   .getRenderer();

 //设置日期显示格式
      DateAxis  dateaxiss=(DateAxis)plot.getDomainAxis();
        SimpleDateFormat frm = new SimpleDateFormat("MM月dd日");
       
        dateaxiss.setDateFormatOverride(frm);
 // 设置网格背景颜色

 plot.setBackgroundPaint(Color.white);

 // 设置网格竖线颜色

 plot.setDomainGridlinePaint(Color.pink);

 // 设置网格横线颜色

 plot.setRangeGridlinePaint(Color.pink);

 // 设置曲线图与xy轴的距离

  plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));
 //plot.setAxisOffset(new RectangleInsets(0D, 0D, 20D, 1D));

 // 设置曲线是否显示数据点

 xylineandshaperenderer.setBaseShapesVisible(true);

 // 设置曲线显示各数据点的值

 XYItemRenderer xyitem = plot.getRenderer();

 xyitem.setBaseItemLabelsVisible(true);

 xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(
   ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));

 xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());

 xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 10));

 plot.setRenderer(xyitem);

 // =============显示各数据点及其数值end======================

 // 设置子标题

 TextTitle subtitle = new TextTitle("设备编号:"+equipment_id, new Font("黑体", Font.BOLD,
   12));

 chart.addSubtitle(subtitle);

 // 设置主标题

 chart.setTitle(new TextTitle("设备良品率折线图", new Font("黑体",
   Font.ITALIC, 16)));

 chart.setAntiAlias(true);
 
   ChartUtilities.writeChartAsJPEG(res.getOutputStream(), 1.0f, chart,
   800, 400, null);

}


private   TimeSeriesCollection getDataSet() {

    DefaultPieDataset dataset = new DefaultPieDataset();

// TimeSeries timeSeries2012 = new TimeSeries("2011年", Day.class);

 //时间曲线数据集合

  TimeSeriesCollection lineDataset = new TimeSeriesCollection();
  TimeSeries timeSeries2011 = new TimeSeries("良品率", Day.class);
    //TimeSeries timeSeries2012 = new TimeSeries("二刀良品率", Day.class);
 //构造数据集合
     lineDataset.addSeries(timeSeries2011);

      Map map = StateReportManger.getIntense().getClientLevelCount(equipment_id); //调用getClientLevelCount()得到所有的数据
     /// StateReportManger sta=new StateReportManger();
     //  Map map=sta.getClientLevelCount(equipment_id);
    for(Iterator iter = map.entrySet().iterator();iter.hasNext();){//遍历,用到Map的. entrySet()方法
      
      Map.Entry entry = (Map.Entry) iter.next();    
         String s=(String) entry.getKey();
         int MM=Integer.parseInt(s.substring(5,7));
      
         int dd=Integer.parseInt(s.substring(8,10));
         int yyyy=Integer.parseInt(s.substring(0,4));
         timeSeries2011.add(new Day(dd,MM,yyyy),Double.parseDouble(String.valueOf(entry.getValue())));
      
        // dataset.setValue((String)entry.getKey(), Double.parseDouble(String.valueOf(entry.getValue())));//设置数据

      }

           return lineDataset;

}

}

效果如下图所示:


 
 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值