最近有个作业要用到JFreeChart,可是上网查了查却发现这方面的资料很少,而且几乎都是雷同的,不适合初学者学习。
JFreeChart功能特别强大,我仅仅也是刚刚掌握了点皮毛。
下面我把我的代码贴上来,作为一个入门级的示例,希望能给初学者一点小小的帮助。。。
import java.awt.Color; import java.awt.Font; 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.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAnchor; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.labels.StandardPieSectionLabelGenerator; import org.jfree.chart.plot.PiePlot3D; import org.jfree.chart.plot.PlotOrientation; 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; public class drawpie { public static void drawit(int[] a, String t) { PieDataset dataset = getDataSet(a); JFreeChart chart = ChartFactory.createPieChart3D("成绩统计图", dataset,true, true, false); PiePlot3D plot = (PiePlot3D) chart.getPlot(); // 图片中显示百分比:自定义方式,{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, 10); TextTitle title = new TextTitle(t); title.setFont(font); // 设置字体,非常关键不然会出现乱码的,下方的字体 chart.getLegend().setItemFont(font); // 设置图片的地址Pie图的字体 plot.setLabelFont(font); chart.setTitle(title); FileOutputStream fos_jpg = null; try { File file=new File("img"); if(!file.exists()) { file.mkdir(); } fos_jpg = new FileOutputStream("img\\"+t+".jpg"); ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 296, 221, null); fos_jpg.close(); } catch (Exception e) { } } private static PieDataset getDataSet(int[] a) { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("优秀",a[0]); dataset.setValue("良好",a[1]); dataset.setValue("中等",a[2]); dataset.setValue("及格",a[3]); dataset.setValue("不及格",a[4]); return dataset; } public static void drawchart(int[][] b,String name) { CategoryDataset ds =getchartDataSet(b); JFreeChart chart = ChartFactory.createBarChart3D( "学生成绩统计图", //图表标题 "分类", //目录轴的显示标签 "人数", //数值轴的显示标签 ds, //数据集 PlotOrientation.VERTICAL, //图表方向 true, //是否显示图例,对于简单的柱状图必须为false false, //是否生成提示工具 false); //是否生成url链接 CategoryPlot categoryplot = (CategoryPlot) chart.getPlot(); NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis(); CategoryAxis domainAxis = categoryplot.getDomainAxis(); /*------设置X轴坐标上的文字-----------*/ domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11)); /*------设置X轴的标题文字------------*/ domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12)); /*------设置Y轴坐标上的文字-----------*/ numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12)); /*------设置Y轴的标题文字------------*/ numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12)); /*------这句代码解决了底部汉字乱码的问题-----------*/ chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); FileOutputStream fos_jpg = null; try { File file=new File("img"); if(!file.exists()) { file.mkdir(); } fos_jpg = new FileOutputStream("img\\"+name+".jpg"); ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 392, 221, null); fos_jpg.close(); } catch (Exception e) { } } private static CategoryDataset getchartDataSet(int[][] b) { DefaultCategoryDataset ds = new DefaultCategoryDataset(); ds.addValue(b[0][0], "优秀", "数学成绩"); ds.addValue(b[0][1], "良好", "数学成绩"); ds.addValue(b[0][2], "中等", "数学成绩"); ds.addValue(b[0][3], "及格", "数学成绩"); ds.addValue(b[0][4], "不及格", "数学成绩"); ds.addValue(b[1][0], "优秀", "英语成绩"); ds.addValue(b[1][1], "良好", "英语成绩"); ds.addValue(b[1][2], "中等", "英语成绩"); ds.addValue(b[1][3], "及格", "英语成绩"); ds.addValue(b[1][4], "不及格", "英语成绩"); ds.addValue(b[2][0], "优秀", "政治成绩"); ds.addValue(b[2][1], "良好", "政治成绩"); ds.addValue(b[2][2], "中等", "政治成绩"); ds.addValue(b[2][3], "及格", "政治成绩"); ds.addValue(b[2][4], "不及格", "政治成绩"); ds.addValue(b[3][0], "优秀", "专业课成绩"); ds.addValue(b[3][1], "良好", "专业课成绩"); ds.addValue(b[3][2], "中等", "专业课成绩"); ds.addValue(b[3][3], "及格", "专业课成绩"); ds.addValue(b[3][4], "不及格", "专业课成绩"); ds.addValue(b[4][0], "优秀", "平均成绩"); ds.addValue(b[4][1], "良好", "平均成绩"); ds.addValue(b[4][2], "中等", "平均成绩"); ds.addValue(b[4][3], "及格", "平均成绩"); ds.addValue(b[4][4], "不及格", "平均成绩"); return ds; } }