JFreeChart画图+jsp页面显示

9 篇文章 0 订阅

1.JFreeChar画图类

package com.mh.test;


import java.awt.Color;
import java.awt.Font;


import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;


public class LineChartDemo {

//数据采集 (被调用)
  private static CategoryDataset createDataset()
  {
    DefaultCategoryDataset localDefaultCategoryDataset = new DefaultCategoryDataset();
    //第一条折线数据 折线名Series 1
    localDefaultCategoryDataset.addValue(21.0D, "Series 1", " 1月 ");
    localDefaultCategoryDataset.addValue(50.0D, "Series 1", " 2月 ");
    localDefaultCategoryDataset.addValue(152.0D, "Series 1", " 3月 ");
    localDefaultCategoryDataset.addValue(184.0D, "Series 1", " 4月 ");
    localDefaultCategoryDataset.addValue(299.0D, "Series 1", " 5月 ");
    //第二条折线数据 折线名Series 2
    localDefaultCategoryDataset.addValue(275.0D, "Series 2", " 1月 ");
    localDefaultCategoryDataset.addValue(121.0D, "Series 2", " 2月 ");
    localDefaultCategoryDataset.addValue(98.0D, "Series 2", " 3月 ");
    localDefaultCategoryDataset.addValue(103.0D, "Series 2", " 4月 ");
    localDefaultCategoryDataset.addValue(210.0D, "Series 2", " 5月 ");
    //第三天折线数据 折线名Series 3
    localDefaultCategoryDataset.addValue(198.0D, "Series 3", " 1月 ");
    localDefaultCategoryDataset.addValue(165.0D, "Series 3", " 2月 ");
    localDefaultCategoryDataset.addValue(55.0D, "Series 3", " 3月 ");
    localDefaultCategoryDataset.addValue(34.0D, "Series 3", " 4月 ");
    localDefaultCategoryDataset.addValue(77.0D, "Series 3", " 5月 ");
    return localDefaultCategoryDataset;
  }


  /**
   * 生成折线图(被调用)
   * @param chartTitle 图的标题
   * @param x          横轴标题
   * @param y          纵轴标题
   * @param dataset    数据集
   * @return
   */
  private static JFreeChart createChart(String chartTitle, String x,
       String y, CategoryDataset dataset)
  { 
   // 构建一个chart
   JFreeChart chart = ChartFactory.createLineChart(
           chartTitle,//图的标题
           x,  //x轴标题
           y,  //y轴标题
           dataset,//数据点
           PlotOrientation.VERTICAL,
           true,
           true,
           false);
   //字体清晰
   chart.setTextAntiAlias(false);
   // 设置背景颜色
   chart.setBackgroundPaint(Color.WHITE);

   // 设置图标题的字体
   Font font = new Font("隶书", Font.BOLD, 25);
   chart.getTitle().setFont(font);

   // 设置面板字体
   Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);
   // 设置图示的字体
   chart.getLegend().setItemFont(labelFont);

   CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
   // x轴 // 分类轴网格是否可见
   categoryplot.setDomainGridlinesVisible(true);
   // y轴 //数据轴网格是否可见
   categoryplot.setRangeGridlinesVisible(true);
   categoryplot.setRangeGridlinePaint(Color.WHITE);// 虚线色彩
   categoryplot.setDomainGridlinePaint(Color.WHITE);// 虚线色彩
   categoryplot.setBackgroundPaint(Color.lightGray);// 折线图的背景颜色

   // 设置轴和面板之间的距离
   // categoryplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));

   // 横轴 x
   CategoryAxis domainAxis = categoryplot.getDomainAxis();
   domainAxis.setLabelFont(labelFont);// 轴标题
   domainAxis.setTickLabelFont(labelFont);// 轴数值
   // domainAxis.setLabelPaint(Color.BLUE);//轴标题的颜色
   // domainAxis.setTickLabelPaint(Color.BLUE);//轴数值的颜色

   // 横轴 lable 的位置 横轴上的 Lable 45度倾斜 DOWN_45
   domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);

   // 设置距离图片左端距离
   domainAxis.setLowerMargin(0.0);
   // 设置距离图片右端距离
   domainAxis.setUpperMargin(0.0);

   // 纵轴 y
   NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
   numberaxis.setLabelFont(labelFont);
   numberaxis.setTickLabelFont(labelFont);
   numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
   numberaxis.setAutoRangeIncludesZero(true);

   // 获得renderer 注意这里是下嗍造型到lineandshaperenderer!!
   LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot
           .getRenderer();
   lineandshaperenderer.setBaseShapesVisible(true); // series 点(即数据点)可见
   lineandshaperenderer.setBaseLinesVisible(true); // series 点(即数据点)间有连线可见

   // 显示折点数据
   lineandshaperenderer
           .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
   lineandshaperenderer.setBaseItemLabelsVisible(true);

   return chart;
  }

//获取JFreeChart
  public static JFreeChart createDemoPanel()
  {
 CategoryDataset database = createDataset();
    JFreeChart localJFreeChart = createChart("图的标题","x标题","y标题",database);


    return localJFreeChart;
  }


}

2.Servlet核心代码

public void staHrvByDay(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {

//保存图片 返回图片文件名
String filename = ServletUtilities.saveChartAsPNG(LineChartDemo.createDemoPanel(), 600, 400, null); 
//获取图片路径(内存中)
String graphURL = request.getContextPath() + "/DisplayChart?filename="   + filename;
//拼接<img src="  "  />
String image=  "<img src='" 
            + graphURL 
            + "' width=600 height=400 border=0 usemap='#" 
            + filename + "'/>";    
request.setAttribute("image", image);
request.getRequestDispatcher("/hrv/hrv.jsp").forward(request,
response);
return ;
}

3.jsp页面显示图片

<tr>
<td >
${image}
</td>
</tr>

4.结果显示
这里写图片描述

createDataset()方法中写从数据库读取数据的操做,并循环添加到DefaultCategoryDataset 对象中,例如取得的数字data[]:
for(int i=0){
localDefaultCategoryDataset.addValue(data[i], “折线名”, ” x轴变量 “);
}

 //根据折线名画出不同折线 如下会产生两天折线 series1和series2
    localDefaultCategoryDataset.addValue(21.0D, "Series 1", " 1月 ");
    localDefaultCategoryDataset.addValue(50.0D, "Series 1", " 2月 ");
    localDefaultCategoryDataset.addValue(152.0D, "Series 1", " 3月 ");
    localDefaultCategoryDataset.addValue(184.0D, "Series 1", " 4月 ");
    localDefaultCategoryDataset.addValue(299.0D, "Series 1", " 5月 ");
    localDefaultCategoryDataset.addValue(275.0D, "Series 2", " 1月 ");
    localDefaultCategoryDataset.addValue(121.0D, "Series 2", " 2月 ");
    localDefaultCategoryDataset.addValue(98.0D, "Series 2", " 3月 ");
    localDefaultCategoryDataset.addValue(103.0D, "Series 2", " 4月 ");
    localDefaultCategoryDataset.addValue(210.0D, "Series 2", " 5月 ");

方法调用时候,注意参数类型要对应,数据类型转换等问题

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用 `PieSectionLabelGenerator` 接口的 `generateSectionLabel` 方法来设置饼图标签的显示格式。具体来说,你需要实现该接口并重写 `generateSectionLabel` 方法来返回你想要显示的标签字符串。 下面是一个示例代码,展示如何生成一个带有百分比小数位数的饼图: ```java import org.jfree.chart.*; import org.jfree.chart.labels.*; import org.jfree.chart.plot.*; import org.jfree.data.general.*; public class PieChartExample { public static void main(String[] args) { // 创建数据集 DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("A", 30); dataset.setValue("B", 20); dataset.setValue("C", 50); // 创建饼图并设置标签显示格式 JFreeChart chart = ChartFactory.createPieChart( "Pie Chart Example", dataset, true, // legend true, // tooltips false // URLs ); PiePlot plot = (PiePlot) chart.getPlot(); plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({2})", null, "%.1f%%")); // 显示图形 ChartFrame frame = new ChartFrame("Pie Chart", chart); frame.pack(); frame.setVisible(true); } } ``` 在上面的代码中,我们使用 `StandardPieSectionLabelGenerator` 类来设置标签字符串格式。其中第一个参数 `{0} ({2})` 表示使用 `{0}` 来表示饼图扇形的名称,使用 `{2}` 来表示饼图扇形所占百分比。第二个参数 `null` 表示不使用其他标签信息。第三个参数 `"%.1f%%"` 表示将百分比格式化为一位小数,并在后面添加 `%` 符号。 你可以根据需要修改上述代码以生成所需的饼图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值