`

常用JfreeChart图标生成代码

阅读更多

1、饼图、柱状图、折线图生成的工具类

  1  package  com.text.util;
  2 
  3  import  java.awt.BasicStroke;
  4  import  java.awt.Color;
  5  import  java.awt.Font;
  6  import  java.awt.GradientPaint;
  7  import  java.io.IOException;
  8  import  java.text.DecimalFormat;
  9  import  java.text.NumberFormat;
 10  import  java.text.SimpleDateFormat;
 11 
 12  import  javax.servlet.http.HttpServletRequest;
 13  import  javax.servlet.http.HttpSession;
 14 
 15  import  org.jfree.chart.ChartFactory;
 16  import  org.jfree.chart.JFreeChart;
 17  import  org.jfree.chart.axis.CategoryAxis;
 18  import  org.jfree.chart.axis.DateAxis;
 19  import  org.jfree.chart.axis.ValueAxis;
 20  import  org.jfree.chart.labels.ItemLabelAnchor;
 21  import  org.jfree.chart.labels.ItemLabelPosition;
 22  import  org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
 23  import  org.jfree.chart.labels.StandardPieSectionLabelGenerator;
 24  import  org.jfree.chart.labels.StandardPieToolTipGenerator;
 25  import  org.jfree.chart.labels.StandardXYItemLabelGenerator;
 26  import  org.jfree.chart.labels.StandardXYToolTipGenerator;
 27  import  org.jfree.chart.plot.CategoryPlot;
 28  import  org.jfree.chart.plot.IntervalMarker;
 29  import  org.jfree.chart.plot.PiePlot;
 30  import  org.jfree.chart.plot.PlotOrientation;
 31  import  org.jfree.chart.plot.XYPlot;
 32  import  org.jfree.chart.renderer.category.BarRenderer;
 33  import  org.jfree.chart.renderer.category.BarRenderer3D;
 34  import  org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
 35  import  org.jfree.chart.servlet.ServletUtilities;
 36  import  org.jfree.chart.title.LegendTitle;
 37  import  org.jfree.chart.title.TextTitle;
 38  import  org.jfree.data.category.CategoryDataset;
 39  import  org.jfree.data.general.DefaultPieDataset;
 40  import  org.jfree.data.time.TimeSeriesCollection;
 41  import  org.jfree.ui.Layer;
 42  import  org.jfree.ui.TextAnchor;
 43  import  org.jfree.util.Rotation;
 44 
 45  /**  
 46   *<br> 文 件 名:JFreeChartServlet.java
 47   *<br> 包    名:com.report.servlet
 48   *<br> 创 建 人:
 49   *<br> 创建日期: Mar 30, 2010 1:00:23 PM
 50   *<br> 描    述:生成jFreeChart
 51    */   
 52  public   class  JFreeChartCreater  {
 53 
 54       /**  
 55       *<br> 方法名称:createPieChart
 56       *<br> 功能描述:创建PieChart(饼图)图表
 57       *<br> 返 回 值:JFreeChart
 58       *<br> 创 建 人:
 59       *<br> 创建日期:Mar 30, 2010 12:59:07 PM
 60       * @param  dataset
 61        */   
 62       public   static  JFreeChart createPieChart(DefaultPieDataset dataset,  
 63              String title, boolean  is3D) {  
 64          JFreeChart chart = null ;  
 65           if (is3D){  
 66              chart = ChartFactory.createPieChart3D(  
 67                      title,  //  图表标题   
 68                      dataset,  //  数据集   
 69                       true ,  //  是否显示图例   
 70                       true ,  //  是否显示工具提示   
 71                       true   //  是否生成URL   
 72                      );  
 73          }  
 74           else { chart  =  ChartFactory.createPieChart(  
 75                  title,  //  图表标题   
 76                  dataset,  //  数据集   
 77                   true ,  //  是否显示图例   
 78                   true ,  //  是否显示工具提示   
 79                   true   //  是否生成URL   
 80                  );  
 81          }  
 82           //  设置标题字体,为了防止中文乱码:必须设置字体   
 83          chart.setTitle( new  TextTitle(title,  new  Font( " 黑体 " , Font.ITALIC,  22 )));  
 84           //  设置图例的字体,为了防止中文乱码:必须设置字体   
 85          chart.getLegend().setItemFont( new  Font( " 黑体 " , Font.BOLD,  12 ));  
 86           //  获取饼图的Plot对象(实际图表)   
 87          PiePlot plot  =  (PiePlot) chart.getPlot();  
 88           //  图形边框颜色   
 89          plot.setBaseSectionOutlinePaint(Color.GRAY);  
 90           //  图形边框粗细   
 91          plot.setBaseSectionOutlineStroke( new  BasicStroke( 0.0f ));  
 92           //  设置饼状图的绘制方向,可以按顺时针方向绘制,也可以按逆时针方向绘制   
 93          plot.setDirection(Rotation.ANTICLOCKWISE);  
 94           //  设置绘制角度(图形旋转角度)   
 95          plot.setStartAngle( 70 );  
 96           //  设置突出显示的数据块  
 97           //  plot.setExplodePercent("One", 0.1D);  
 98           //  设置背景色透明度   
 99          plot.setBackgroundAlpha( 0.7F );  
100           //  设置前景色透明度   
101          plot.setForegroundAlpha( 0.65F );  
102           //  设置区块标签的字体==为了防止中文乱码:必须设置字体   
103          plot.setLabelFont( new  Font( " 宋体 " , Font.PLAIN,  12 ));  
104           //  扇区分离显示,对3D图不起效   
105           if (is3D)  
106              plot.setExplodePercent(dataset.getKey( 3 ),  0.1D );  
107           //  图例显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位   
108          plot.setLabelGenerator( new  StandardPieSectionLabelGenerator(  
109                   " {0}:{1}\r\n({2}) " , NumberFormat.getNumberInstance(),  
110                   new  DecimalFormat( " 0.00% " )));  
111           //  指定显示的饼图为:圆形(true) 还是椭圆形(false)   
112          plot.setCircular( true );  
113           //  没有数据的时候显示的内容   
114          plot.setNoDataMessage( " 找不到可用数据 " );  
115   
116           //  设置鼠标悬停提示   
117          plot.setToolTipGenerator( new  StandardPieToolTipGenerator());  
118           //  设置热点链接  
119           //  plot.setURLGenerator(new StandardPieURLGenerator("detail.jsp"));   
120   
121           return  chart;  
122      }  
123       /**  
124       *<br> 方法名称:createPieChart
125       *<br> 功能描述:创建BarChart(柱状图/条形图)图表 
126       *<br> 返 回 值:JFreeChart
127       *<br> 创 建 人:
128       *<br> 创建日期:Mar 30, 2010 12:59:07 PM
129       * @param  dataset
130        */ 
131      @SuppressWarnings( " deprecation " )
132       public   static  JFreeChart createBarChart(CategoryDataset dataset,  
133              String title, String x, String y, boolean  is3D) {  
134          JFreeChart chart  = null ; 
135          BarRenderer renderer  =   null ;
136           if (is3D){  
137              chart  =  ChartFactory.createBarChart3D(  //  3D柱状图  
138                       //  JFreeChart chart = ChartFactory.createLineChart3D(  // 3D折线图   
139                      title,  //  图表的标题   
140                      x,  //  目录轴的显示标签   
141                      y,  //  数值轴的显示标签   
142                      dataset,  //  数据集   
143                      PlotOrientation.VERTICAL,  //  图表方式:V垂直;H水平   
144                       true ,  //  是否显示图例   
145                       false ,  //  是否显示工具提示   
146                       false   //  是否生成URL   
147                      );  
148               //  柱图的呈现器
149              renderer  =   new  BarRenderer3D();
150              renderer.setItemLabelGenerator( new  StandardCategoryItemLabelGenerator());    
151              renderer.setItemLabelFont( new    Font( " 黑体 " ,Font.PLAIN, 12 ));    
152              renderer.setItemLabelsVisible( true );
153               // 3D柱子上不能正常显示数字
154               // 注意:如果数值太大切前面的柱子低于后面的柱子,那么前面的那个数值将被挡住,所以将下面方法中的0该为-值
155              ItemLabelPosition itemLabelPositionFallback  =   new  ItemLabelPosition(
156                      ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT,
157                      TextAnchor.HALF_ASCENT_LEFT, - 1.3D );
158               // 设置不能正常显示的柱子label的position
159              renderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback);
160              renderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback);
161          } else {  
162              chart  =  ChartFactory.createBarChart(  //  柱状图  
163                       //  JFreeChart chart = ChartFactory.createLineChart3D(  // 3D折线图   
164                      title,  //  图表的标题   
165                      x,  //  目录轴的显示标签   
166                      y,  //  数值轴的显示标签   
167                      dataset,  //  数据集   
168                      PlotOrientation.VERTICAL,  //  图表方式:V垂直;H水平   
169                       true ,  //  是否显示图例   
170                       false ,  //  是否显示工具提示   
171                       false   //  是否生成URL   
172                      ); 
173               //  柱图的呈现器
174              renderer  =   new  BarRenderer();
175              renderer.setIncludeBaseInRange( true );         //  显示每个柱的数值,并修改该数值的字体属性   
176              renderer.setBaseItemLabelGenerator( new  StandardCategoryItemLabelGenerator());  
177              renderer.setBaseItemLabelsVisible( true );
178          }  
179            
180           // 设置图片背景
181  //         chart.setBackgroundPaint(Color.PINK);
182           //  为了防止中文乱码:必须设置字体   
183          chart.setTitle( new  TextTitle(title,  new  Font( " 黑体 " , Font.PLAIN,  22 )));  
184          LegendTitle legend  =  chart.getLegend();  //  获取图例   
185          legend.setItemFont( new  Font( " 宋体 " , Font.BOLD,  12 ));  //  设置图例的字体,防止中文乱码   
186          CategoryPlot plot  =  (CategoryPlot) chart.getPlot();  //  获取柱图的Plot对象(实际图表)  
187           //  设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)   
188          plot.setBackgroundPaint( new  Color( 255 ,  255 ,  204 ));  
189          plot.setForegroundAlpha( 0.65F );  //  设置前景色透明度  
190           //  设置横虚线可见   
191          plot.setRangeGridlinesVisible( true );  
192           //  虚线色彩   
193          plot.setRangeGridlinePaint(Color.gray); 
194   
195          ValueAxis rangeAxis  =  plot.getRangeAxis();
196           // 设置最高的一个Item与图片顶端的距离
197          rangeAxis.setUpperMargin( 0.2 );
198           // 设置最低的一个Item与图片底端的距离
199          rangeAxis.setLowerMargin( 0.3 );
200         
201          CategoryAxis domainAxis  =  plot.getDomainAxis();  //  获取x轴   
202          domainAxis.setMaximumCategoryLabelWidthRatio( 1.0f ); //  横轴上的 Lable 是否完整显示   
203          domainAxis.setLabelFont( new  Font( " 宋体 " , Font.TRUETYPE_FONT,  14 )); //  设置字体,防止中文乱码   
204          domainAxis.setTickLabelFont( new  Font( " 宋体 " , Font.BOLD,  12 )); //  轴数值 
205           //  h.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 45度倾斜   
206          plot.getRangeAxis().setLabelFont( new  Font( " 宋体 " , Font.TRUETYPE_FONT,  14 ));  //  Y轴设置字体,防止中文乱码   
207           
208          renderer.setBaseOutlinePaint(Color.BLACK);    //  设置柱子边框颜色 
209          renderer.setDrawBarOutline( true );                //  设置柱子边框可见 
210          renderer.setSeriesPaint( 0 , Color.YELLOW);     //  设置每个柱的颜色
211          renderer.setSeriesPaint( 1 , Color.green);
212          renderer.setSeriesPaint( 2 , Color.RED);
213          renderer.setSeriesPaint( 3 , Color.CYAN);
214          renderer.setSeriesPaint( 5 , Color.ORANGE);
215          renderer.setSeriesPaint( 4 , Color.MAGENTA);
216          renderer.setSeriesPaint( 6 , Color.DARK_GRAY);
217          renderer.setSeriesPaint( 7 , Color.PINK);
218          renderer.setSeriesPaint( 8 , Color.black);
219          renderer.setItemMargin( 0.1 );                    //  设置每个地区所包含的平行柱的之间距离
220          plot.setRenderer(renderer);                   //  给柱图添加呈现器   
221          plot.setForegroundAlpha( 0.7f );                //  设置柱的透明度
222  //         renderer.setMaximumBarWidth(0.2);             //  设置柱子宽度  
223  //         renderer.setMinimumBarLength(0.6);            //  设置柱子高度
224           // 设置横坐标显示位置(默认是下方);
225  //         plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
226           // 设置纵坐标显示位置(默认是左方)
227  //         plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
228           //  没有数据的时候显示的内容   
229          plot.setNoDataMessage( " 找不到可用数据 " );  
230   
231           return  chart;  
232      }  
233   
234       /**  
235       *<br> 方法名称:JFreeChartSeriesChart
236       *<br> 功能描述:创建曲线图(折线图)
237       *<br> 注意事项:一般曲线图不用加域所以后4个参数一般为(false,null,0,0)
238       *<br> 参 数:title-标题;subtitleStr-子标题;domain-x轴标志;range-y轴标志;dataset-设置数据;isAreaText-是否在图标中加域;
239       *<br> areaText-域中文字,lowpress-域的最低刻度;uperpress-域的最高刻度
240       *<br> 返 回 值:JFreeChart
241       *<br> 创 建 人:
242       *<br> 创建日期:Mar 30, 2010 1:11:24 PM
243        */   
244      @SuppressWarnings( " deprecation " )
245       public   static  JFreeChart JFreeChartSeriesChart(String title,
246              String subtitleStr, String domain, String range,
247              TimeSeriesCollection dataset, boolean  isAreaText,String areaText, double  lowpress, double  uperpress) {  // 时间曲线元素
248           //  JFreeChart chart = ChartFactory.createTimeSeriesChart("标题","x轴标志","y轴标志","设置数据",是否显示图形,是否进行提示,是否配置报表存放地址);
249          JFreeChart chart  =  ChartFactory.createTimeSeriesChart(title, domain,range, dataset,  true ,  true ,  false );
250          
251           if (subtitleStr != null ){
252              TextTitle subtitle  =   new  TextTitle(subtitleStr,  new  Font( " 黑体 " ,Font.BOLD,  12 ));
253              chart.addSubtitle(subtitle);
254          }
255           //  设置日期显示格式
256          XYPlot plot  =  chart.getXYPlot();
257          DateAxis axis  =  (DateAxis) plot.getDomainAxis();
258          axis.setDateFormatOverride( new  SimpleDateFormat( " yyyy-MM-dd " ));
259           //  设置标题的颜色  
260          chart.setTitle( new  TextTitle(title,  new  Font( " 黑体 " , Font.ITALIC,  22 )));
261          chart.setBackgroundPaint( new  GradientPaint( 0 ,  0 , Color.white,  0 ,  1000 , Color.blue));
262          plot.setOutlineStroke( new  BasicStroke( 1.5f ));  //  边框粗细
263          ValueAxis vaxis  =  plot.getDomainAxis();
264            vaxis.setAxisLineStroke(new BasicStroke(1.5f)); // 坐标轴粗细
265         vaxis.setAxisLinePaint(new Color(215, 215, 215)); // 坐标轴颜色
266         vaxis.setLabelPaint(new Color(10, 10, 10)); // 坐标轴标题颜色
267         vaxis.setTickLabelPaint(new Color(102, 102, 102)); // 坐标轴标尺值颜色
268         vaxis.setLowerMargin(0.06d);// 分类轴下(左)边距
269         vaxis.setUpperMargin(0.14d);// 分类轴下(右)边距,防止最后边的一个数据靠近了坐标轴。
270         plot.setNoDataMessage("找不到可用数据");//没有数据时显示的文字说明。
271         XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();
272         //第一条折线的颜色 
273         xylineandshaperenderer.setBaseItemLabelsVisible(true); 
274         xylineandshaperenderer.setSeriesFillPaint(0, new Color(127, 128, 0)); 
275         xylineandshaperenderer.setSeriesPaint(0, new Color(127, 128, 0)); 
276         xylineandshaperenderer.setSeriesShapesVisible(0, true); 
277         xylineandshaperenderer.setSeriesShapesVisible(1, true);
278         xylineandshaperenderer.setSeriesShapesVisible(2, true);
279         xylineandshaperenderer.setSeriesShapesVisible(3, true);
280         xylineandshaperenderer.setSeriesShapesVisible(4, true);
281         //折线的粗细调 
282         StandardXYToolTipGenerator xytool = new StandardXYToolTipGenerator(); 
283         xylineandshaperenderer.setToolTipGenerator(xytool); 
284         xylineandshaperenderer.setStroke(new BasicStroke(1.5f));
285         // 显示节点的值 
286         xylineandshaperenderer.setBaseItemLabelsVisible(true); 
287         xylineandshaperenderer.setBasePositiveItemLabelPosition(new ItemLabelPosition( 
288         ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER)); 
289         xylineandshaperenderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator()); 
290         xylineandshaperenderer.setBaseItemLabelPaint(new Color(102, 102, 102));// 显示折点数值字体的颜色 
291        
292         ValueAxis rangeAxis = plot.getRangeAxis();
293         //设置最高的一个Item与图片顶端的距离
294         rangeAxis.setUpperMargin(0.2);
295         //设置最低的一个Item与图片底端的距离
296         rangeAxis.setLowerMargin(0.3);
297         //在图表中加区域加区域
298         if(isAreaText){
299             lowpress = 62; 
300             uperpress = 400; 
301             IntervalMarker intermarker = new IntervalMarker(lowpress, uperpress); 
302             intermarker.setPaint(Color.decode("#66FFCC"));// 域顏色 
303             intermarker.setLabelFont(new Font("SansSerif", 41, 14)); 
304             intermarker.setLabelPaint(Color.RED);
305             intermarker.setLabel(areaText);
306             if (dataset != null) { 
307                 plot.addRangeMarker(intermarker, Layer.BACKGROUND); 
308             } 
309         }
310         return chart;
311     }
312
313
314     /** 
315      *<br> 方法名称:getGraphURL
316      *<br> 功能描述:取得session中图像的地址;
317      *<br> 返 回 值:String
318      *<br> 创 建 人:
319      *<br> 创建日期:Mar 30, 2010 1:09:51 PM
320      */  
321     public static String getGraphURL(JFreeChart chart, HttpSession session,
322             HttpServletRequest request, int width, int height)throws IOException {
323         String filename = ServletUtilities.saveChartAsPNG(chart, width, height,null, session);
324         String graphURL = request.getContextPath()+ "/servlet/DisplayChart?filename=" + filename;
325         return graphURL;
326     }
327    
328 } 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics