jfreechart

需要两个包:jcommon和jfreechart

去百度一下:jfreechart可以下载jfree的源代码。里面有需要用到的包。

下面是一些简单的例子,包括:柱状图、饼图和曲线图:

其中:柱状图和饼图,不知道什么原因,不支持Double类型的数据,而源代码中有这样的功能(偶尔执行dataset.addValue()的时候,到方法体里面,数值变成了0)。

     索性,柱状图和饼图就用Integer类型的数据了。

/**
  * 画柱状图
  */
public ActionForward writerZhu(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  DefaultCategoryDataset dataset = new DefaultCategoryDataset();
  Integer one = 3001;
  Integer two = 235;
  Integer three = 5211;
  Integer four = 268;
  Integer five = 1053;
  Integer six = 799;
  Integer seven = 6000;
  Integer eight = 3048;
  Integer nine = 592;
  Integer ten = 1099;
  Integer eleven = 4080;
  Integer twelve = 1399;
  dataset.addValue(one, "07年", "一月");
  dataset.addValue(two, "08年", "一月");
  dataset.addValue(three, "09年", "一月");
  dataset.addValue(four, "07年", "二月");
  dataset.addValue(five, "08年", "二月");
  dataset.addValue(six, "09年", "二月");
  dataset.addValue(seven, "07年", "三月");
  dataset.addValue(eight, "08年", "三月");
  dataset.addValue(nine, "09年", "三月");
  dataset.addValue(ten, "07年", "四月");
  dataset.addValue(eleven, "08年", "四月");
  dataset.addValue(twelve, "09年", "四月");
       
  JFreeChart chart = ChartFactory.createBarChart3D("2008年公务员1上传工时费信息按月统计",
    "公务员1工作量按月统计", "工作数据量", dataset, PlotOrientation.VERTICAL,
    true, false, false);
  chart.setTitle(new TextTitle("2008年公务员上传工时费信息按月统计", new Font("隶书", Font.BOLD, 30)));
  chart.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 1000, 0,new Color(60,190,50))); // 设置背景样式
//  chart.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 1000, 0,Color.red)); // 设置背景样式
  CategoryPlot plot = (CategoryPlot) chart.getPlot();
  plot.setForegroundAlpha(0.75f); // 柱子透明度
  plot.setNoDataMessage("无对应的数据.");
  plot.setNoDataMessagePaint(Color.red);
  // 设置是否有横线
  plot.setRangeGridlinesVisible(true); // 虚线色彩 
        plot.setRangeGridlinePaint(Color.GREEN);
  NumberAxis3D verticalAxis = (NumberAxis3D) plot.getRangeAxis();
  verticalAxis.setStandardTickUnits(NumberAxis3D.createIntegerTickUnits());

//  CategoryAxis domainAxis = plot.getDomainAxis(); 
//  domainAxis.setCategoryLabelPositions(CategoryLabelPositions 
//    .createUpRotationLabelPositions(Math.PI / 3.0)); //Lable(Math.PI/3.0)度倾斜 
//        domainAxis.setMaximumCategoryLabelWidthRatio(1f);// 横轴上的 Lable 是否完整显示 
//      设置距离图片左端距离 
//        domainAxis.setLowerMargin(0.1); 
//        // 设置距离图片右端距离 
//        domainAxis.setUpperMargin(0.1); 
        // 设置 columnKey 是否间隔显示 
//        domainAxis.setSkipCategoryLabelsToFit(true);
 
  BarRenderer3D renderer = new BarRenderer3D();
  renderer.setItemMargin(0); // 设置每个地区所包含的平行柱的之间距离
  renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
  renderer.setBaseItemLabelsVisible(true);
  // 设置柱形图上的文字偏离值
  renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
    ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
  renderer.setItemLabelAnchorOffset(10D);
 
  plot.setRenderer(renderer);
  try {
   ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1,
     chart, 980, 550, null);
  } catch (IOException e) {
   e.printStackTrace();
  }
  return null;
}
/**
  * 画柱饼
  */
public ActionForward writerBing(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  String title = "2008年公务员工作统计";
  DefaultPieDataset piedata = new DefaultPieDataset();
  Integer i1 = 100;
  Integer i2 = 200;
  Integer i3 = 500;
  Integer i4 = 150;
  // 第一个参数为名称,第二个参数是double数
  piedata.setValue("公务员1", i1);
  piedata.setValue("公务员2", i2);
  piedata.setValue("公务员3", i3);
  piedata.setValue("公务员4", i4);
  JFreeChart chart = ChartFactory.createPieChart(title, piedata, true,
    true, true);
  chart.setTextAntiAlias(false);
  // 图片背景色
  chart.setBackgroundPaint(Color.white);
  // 设置图标题的字体重新设置title
  Font font = new Font("隶书", Font.BOLD, 25);
  TextTitle title1 = new TextTitle(title);
  title1.setFont(font);
  chart.setTitle(title1);

//  PiePlot3D plot = (PiePlot3D) chart.getPlot();
  PiePlot plot = (PiePlot) chart.getPlot();
  plot.setBaseSectionOutlinePaint(Color.BLACK);
  plot.setBaseSectionPaint(Color.BLACK);

  plot.setNoDataMessage("无对应的数据,请重新查询。");
  plot.setNoDataMessagePaint(Color.red);
  // 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
  plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
    "{0}={1}({2})", NumberFormat.getNumberInstance(),
    new DecimalFormat("0.00%")));
  // 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
  plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
    "{0}={1}({2})"));
  plot.setLabelFont(new Font("SansSerif", Font.TRUETYPE_FONT, 12));
  // 指定图片的透明度(0.0-1.0)
  plot.setForegroundAlpha(0.65f);
  // 指定显示的饼图上圆形(false)还椭圆形(true)
  plot.setCircular(false, true);
  // 设置第一个 饼块section 的开始位置,默认是12点钟方向
  plot.setStartAngle(90);
  try {
   ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1,
     chart, 800, 550, null);
  } catch (IOException e) {
   e.printStackTrace();
  }
  return null;
}
/**
  * 画曲线
  */
public ActionForward writerQuXian(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
//  曲线图标题
  String title = "工作量趋势分析";
//  曲线图X轴提示
  String domain = "月份走势";
//  曲线图Y轴提示
  String range = "数据量";
//  曲线图自标题
  String subtitleStr = "公务员1工作量";
//  创建时间数据源
//  每一个TimeSeries在图上是一条曲线
  TimeSeries ca = new TimeSeries("开城阳光");
  for (int i = 2008; i <= 2010; i++) {
   for (int mon = 0; mon < 12; mon++) {
    ca.add( new TimeSeriesDataItem( new Day(1, mon + 1, i),new Double(1000 + Math.random() * 100)));
   }
  }
//  时间曲线数据集合
  TimeSeriesCollection dataset = new TimeSeriesCollection();
  dataset.addSeries(ca); //还可以继续加
//  时间曲线元素
  JFreeChart chart = ChartFactory.createTimeSeriesChart(
  title,
  domain,
  range,
  dataset,
  true,
  true,
  false);
  TextTitle subtitle = new TextTitle(subtitleStr, new Font("黑体", Font.BOLD, 18));
  chart.addSubtitle(subtitle);
  chart.setTitle(new TextTitle(title, new Font("隶书", Font.BOLD, 35)));
  chart.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 0, 1000, Color.blue));
  try {
   ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1,
     chart, 800, 550, null);
  } catch (IOException e) {
   e.printStackTrace();
  }
  return null;
}

你可能感兴趣的:(工作,jfreechart,百度)