JFreeChart 图表 实例 桃扇骨 2022-04-16 03:07 206阅读 0赞 /\*\* \* @Title JFreeChartGo.java \* @Package org.wang.jfreechart \* @Description TODO \* @date 2011-12-21 上午09:40:08 \* @version V1.0 \*/ package org.wang.jfreechart; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Toolkit; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileOutputStream; import java.text.DecimalFormat; import java.text.NumberFormat; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.AxisLocation; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.CategoryLabelPositions; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.labels.CategoryItemLabelGenerator; import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.labels.StandardPieSectionLabelGenerator; import org.jfree.chart.labels.StandardXYItemLabelGenerator; import org.jfree.chart.labels.XYItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PiePlot3D; 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.XYSplineRenderer; import org.jfree.chart.title.TextTitle; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.data.general.DefaultPieDataset; import org.jfree.data.general.PieDataset; import org.jfree.data.xy.DefaultXYDataset; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; /\*\* \* @datetime 2011-12-21 上午09:40:08 \* @class org.wang.jfreechart.JFreeChartGo \* @description \*/ public class JFreeChartGo \{ public static void main(String\[\] args) \{ PieDatasetGo(); CategoryDatasetGo(); XYSplineRendererGo(); \} /\*\* \* @datetime 2011-12-21 上午10:08:58 \* @Title PieDatasetGo \* @Description 饼图例子 \* \*/ private static void PieDatasetGo() \{ PieDataset dataset = getDataSet(); JFreeChart chart = ChartFactory.createPieChart3D( " 项目进度分布", // chart title dataset,// data true,// include legend true, false ); PiePlot3D plot=(PiePlot3D)chart.getPlot(); //设置图片底部字体 **chart.getLegend().setItemFont(new Font("宋体",Font.PLAIN,12)); plot.setLabelFont(new Font("宋体",Font.PLAIN,12)); ** // 图片中显示百分比:默认方式 //plot.setLabelGenerator(new StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT\_TOOLTIP\_FORMAT)); // 图片中显示百分比:自定义方式,\{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\})")); // 设置背景色为白色 chart.setBackgroundPaint(Color.white); // 指定图片的透明度(0.0-1.0) plot.setForegroundAlpha(1.0f); // 指定显示的饼图上圆形(false)还椭圆形(true) plot.setCircular(true); // 设置图标题的字体 **Font font = new Font("黑体",Font.CENTER\_BASELINE,20); TextTitle title = new TextTitle(" 项目状态分布"); title.setFont(font); ** chart.setTitle(title); //FileOutputStream fos\_jpg = null; try \{ //fos\_jpg=new FileOutputStream("D:\\\\img.jpg"); //ChartUtilities.writeChartAsJPEG(fos\_jpg,**1** ,chart,640,480,null); //fos\_jpg.close(); File file = new File("d:/img.png"); ChartUtilities.saveChartAsPNG(file,chart,640,480);//把报表保存为文件 \} catch (Exception e) \{ e.printStackTrace(); \} ChartPreview(chart); \} /\*\* \* \* @datetime 2011-12-21 上午10:12:22 \* @Title getDataSet \* @Description 获取饼图数据 \* \*/ private static PieDataset getDataSet() \{ DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue(" 市场前期", new Double(10)); dataset.setValue(" 立项", new Double(15)); dataset.setValue(" 计划", new Double(10)); dataset.setValue(" 需求与设计", new Double(10)); dataset.setValue(" 执行控制", new Double(35)); dataset.setValue(" 收尾", new Double(10)); dataset.setValue(" 运维",new Double(10)); return dataset; \} @SuppressWarnings("deprecation") private static void CategoryDatasetGo()\{ CategoryDataset dataset = getCateDataSet(); **Font xfont = new Font("宋体",Font.PLAIN,12);** JFreeChart chart = ChartFactory.createBarChart3D( "招生信息总览", // 图表标题 "应报与实报对照", // 目录轴的显示标签 "人数", // 数值轴的显示标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 true, // 是否显示图例(对于简单的柱状图必须是false) true, // 是否生成工具 true // 是否生成URL链接 ); // 设置图标题的字体 Font font = new Font("黑体",Font.CENTER\_BASELINE,20); chart.getTitle().setFont(font); //设置图片底部字体 chart.getLegend().setItemFont(xfont); CategoryPlot plot = chart.getCategoryPlot();//获得图表区域对象 // X 轴 //设置图表的纵轴和横轴org.jfree.chart.axis.CategoryAxis org.jfree.chart.axis.CategoryAxis domainAxis = plot.getDomainAxis(); domainAxis.setLowerMargin(0.1);//设置距离图片左端距离此时为10% domainAxis.setUpperMargin(0.1);//设置距离图片右端距离此时为百分之10 domainAxis.setCategoryLabelPositionOffset(10);//图表横轴与标签的距离(10像素) domainAxis.setCategoryMargin(0.2);//横轴标签之间的距离20% //domainAxis.setMaximumCategoryLabelLines(1); //domainAxis.setMaximumCategoryLabelWidthRatio(0); **domainAxis.setLabelFont(xfont);// X轴标题 domainAxis.setTickLabelFont(xfont);// X轴数值** domainAxis.setTickLabelPaint(Color.BLUE) ; // 字体颜色 domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD); // 横轴上的label斜显示 //设定柱子的属性 org.jfree.chart.axis.ValueAxis rangeAxis = plot.getRangeAxis(); rangeAxis.setUpperMargin(0.1);//设置最高的一个柱与图片顶端的距离(最高柱的10%) rangeAxis.setLabelFont(xfont);// Y轴标题 rangeAxis.setTickLabelFont(xfont);//Y轴数值 rangeAxis.setLabelPaint(Color.BLUE) ; // 字体颜色 rangeAxis.setTickLabelFont(xfont); //设置图表的颜色 org.jfree.chart.renderer.category.BarRenderer3D renderer; renderer = new org.jfree.chart.renderer.category.BarRenderer3D(); renderer.setBaseOutlinePaint(Color.red); renderer.setSeriesPaint(0, new Color(0, 255, 255));//计划柱子的颜色为青色 renderer.setSeriesOutlinePaint(0,Color.BLACK);//边框为黑色 renderer.setSeriesPaint(1, new Color(0, 255, 0));//实报柱子的颜色为绿色 renderer.setSeriesOutlinePaint(1,Color.red);//边框为红色 renderer.setItemMargin(0.1);//组内柱子间隔为组宽的10% //显示每个柱的数值,并修改该数值的字体属性 renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setItemLabelFont(new Font("黑体",Font.BOLD,12));//12号黑体加粗 renderer.setItemLabelPaint(Color.black);//字体为黑色 renderer.setItemLabelsVisible(true); plot.setRenderer(renderer);//使用我们设计的效果 //设置纵横坐标的显示位置 plot.setDomainAxisLocation(AxisLocation.BOTTOM\_OR\_LEFT);//学校显示在下端(柱子竖直)或左侧(柱子水平) plot.setRangeAxisLocation(AxisLocation.BOTTOM\_OR\_LEFT); //人数显示在下端(柱子水平)或左侧(柱子竖直) try \{ File file = new File("d:/student.png"); ChartUtilities.saveChartAsPNG(file,chart,400,300);//把报表保存为文件 \}catch (Exception e) \{ String s = e.getLocalizedMessage(); s = e.getMessage(); s = e.toString(); \} ChartPreview(chart); \} /\*\* \* @datetime 2011-12-21 上午11:35:09 \* @Title ChartPreview \* @Description 预览图片 \* \*/ private static void ChartPreview(JFreeChart chart) \{ //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*// //\* 将生成的报表放到预览窗口中 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*// final ChartFrame preview = new ChartFrame("招生信息",chart); preview.addWindowListener(new WindowAdapter() \{ public void windowClosing(final WindowEvent event) \{ preview.dispose(); \} \}); preview.pack(); //调整预览窗口的大小和位置,适合屏幕,并且居中 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); preview.setSize(screenSize.width,screenSize.height-50);//适合屏幕,50表示把工具栏要考虑在内 Dimension frameSize = preview.getSize(); if (frameSize.height > screenSize.height) \{ frameSize.height = screenSize.height; \} if (frameSize.width > screenSize.width) \{ frameSize.width = screenSize.width; \} preview.setLocation( (screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height-50) / 2); //显示报表预览窗口 preview.setVisible(true); \} /\*\* \* \* @datetime 2011-12-21 上午10:12:50 \* @Title getCateDataSet \* @Description 获取柱状图数据 \* \*/ private static CategoryDataset getCateDataSet() \{ DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(200, "计划", "清华大学"); dataset.addValue(400, "实报", "清华大学"); dataset.addValue(100, "计划", "天津大学"); dataset.addValue(205, "实报", "天津大学"); dataset.addValue(200, "计划", "郑州大学"); dataset.addValue(285, "实报", "郑州大学"); return dataset; \} /\*\* \* \* @datetime 2011-12-21 下午02:29:20 \* @Title XYSplineRendererGo \* @Description 平滑曲线图 \* \*/ private static void XYSplineRendererGo()\{ XYDataset dataset= getXYDataset(); Font xfont = new Font("宋体",Font.PLAIN,12); JFreeChart chart = ChartFactory.createXYLineChart("分布率", "x轴", "y轴", dataset, PlotOrientation.VERTICAL, true, false, false); //设置图标题的字体 Font font = new Font("黑体",Font.CENTER\_BASELINE,20); chart.getTitle().setFont(font); //设置图例字体 chart.getLegend().setItemFont(xfont); XYPlot plot = (XYPlot) chart.getPlot(); ValueAxis domainAxis= plot.getDomainAxis(); domainAxis.setLowerMargin(0.1);//设置距离图片左端距离此时为10% domainAxis.setUpperMargin(0.1);//设置距离图片右端距离此时为百分之10 domainAxis.setLabelFont(xfont);// X轴标题 domainAxis.setTickLabelFont(xfont);// X轴数值 domainAxis.setTickLabelPaint(Color.BLUE) ; // 字体颜色 NumberAxis rangeAxis=(NumberAxis)plot.getRangeAxis(); rangeAxis.setUpperMargin(0.1);//设置最高的一个柱与图片顶端的距离(最高柱的10%) rangeAxis.setLabelFont(xfont);// Y轴标题 rangeAxis.setTickLabelFont(xfont);//Y轴数值 rangeAxis.setLabelPaint(Color.BLUE) ; // 字体颜色 rangeAxis.setTickLabelFont(xfont); **NumberFormat numberformat = new DecimalFormat("00%"); rangeAxis.setNumberFormatOverride(numberformat);// 设置y轴以百分比方式显示** //平滑曲线 **XYItemRenderer renderer = new XYSplineRenderer();** renderer.setItemLabelPaint(Color.black);//字体为黑色 renderer.setItemLabelsVisible(true); renderer.setItemLabelFont(font); **//采集点采用百分比 /\*NumberFormat nfP = NumberFormat.getPercentInstance(); nfP.setMaximumFractionDigits(2); //百分数格式 renderer.setBaseItemLabelGenerator( new StandardXYItemLabelGenerator ( "\{2\}",NumberFormat.getPercentInstance(), NumberFormat.getPercentInstance()));\*/** plot.setRenderer(renderer); try \{ File file = new File("d:/xy.png"); ChartUtilities.saveChartAsPNG(file,chart,400,300);//把报表保存为文件 \}catch (Exception e) \{ String s = e.getLocalizedMessage(); s = e.getMessage(); s = e.toString(); \} ChartPreview(chart); \} private static XYSeriesCollection getXYDataset()\{ XYSeries dataSeries = new XYSeries("增长率"); dataSeries.add(49,0.17); dataSeries.add(59,0.15); dataSeries.add(69,0.35); dataSeries.add(79,0.65); dataSeries.add(89,0.85); dataSeries.add(100,1.00); XYSeriesCollection xyDataset = new XYSeriesCollection(); xyDataset.addSeries(dataSeries); return xyDataset; \} \} ![0_1324449582tT3m.gif][]![0_13244495977x63.gif][]![0_1324449605G141.gif][] 转自:http://blog.csdn.net/jbgtwang/article/details/7091300 [0_1324449582tT3m.gif]: http://hi.csdn.net/attachment/201112/21/0_1324449582tT3m.gif [0_13244495977x63.gif]: http://hi.csdn.net/attachment/201112/21/0_13244495977x63.gif [0_1324449605G141.gif]: /images/20220416/41c5e6cd533347bc9f6ada9c4a242049.png
还没有评论,来说两句吧...