使用jfreechart生成柱状图、折线图、和饼状图

jopen 7年前

JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。下面我就详细介绍如何使用jfreechart生成柱状图、折线图、和饼状图。

步骤:

①、导入其相应的jcommon-1.0.16.jar和jfreechart-1.0.13.jar文件(可点击下载

②、下面就可以写实现各种图形的代码了

A、生成柱状图:

</div>
package com.whp.test;        import java.awt.Font;    import java.io.File;    import java.io.IOException;        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.CategoryAxis3D;    import org.jfree.chart.axis.NumberAxis3D;    import org.jfree.chart.axis.NumberTickUnit;    import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;    import org.jfree.chart.plot.CategoryPlot;    import org.jfree.chart.plot.PlotOrientation;    import org.jfree.chart.renderer.category.BarRenderer3D;    import org.jfree.data.category.DefaultCategoryDataset;        public class jfreeChart {            public static void main(String[] args) {            // TODO Auto-generated method stub            DefaultCategoryDataset dataset=new DefaultCategoryDataset();            //添加数据            dataset.addValue(98, "数学", "张三");            dataset.addValue(87, "语文", "张三");            dataset.addValue(68, "数学", "李四");            dataset.addValue(89, "语文", "李四");            dataset.addValue(56, "数学", "王五");            dataset.addValue(96, "语文", "王五");                        JFreeChart chart=ChartFactory.createBarChart3D(                    "成绩统计表",                    "学生姓名",//X轴的标签                     "分数",//Y轴的标签                     dataset, //图标显示的数据集合                    PlotOrientation.VERTICAL, //图像的显示形式(水平或者垂直)                    true,//是否显示子标题                     true,//是否生成提示的标签                     true); //是否生成URL链接                         //处理图形上的乱码                    //处理主标题的乱码                    chart.getTitle().setFont(new Font("宋体",Font.BOLD,18));                    //处理子标题乱码                    chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,15));                    //获取图表区域对象                    CategoryPlot categoryPlot = (CategoryPlot)chart.getPlot();                    //获取X轴的对象                    CategoryAxis3D categoryAxis3D = (CategoryAxis3D)categoryPlot.getDomainAxis();                    //获取Y轴的对象                    NumberAxis3D numberAxis3D = (NumberAxis3D)categoryPlot.getRangeAxis();                    //处理X轴上的乱码                    categoryAxis3D.setTickLabelFont(new Font("宋体",Font.BOLD,15));                    //处理X轴外的乱码                    categoryAxis3D.setLabelFont(new Font("宋体",Font.BOLD,15));                    //处理Y轴上的乱码                    numberAxis3D.setTickLabelFont(new Font("宋体",Font.BOLD,15));                    //处理Y轴外的乱码                    numberAxis3D.setLabelFont(new Font("宋体",Font.BOLD,15));                    //处理Y轴上显示的刻度,以10作为1格                    numberAxis3D.setAutoTickUnitSelection(false);                    NumberTickUnit unit = new NumberTickUnit(10);                    numberAxis3D.setTickUnit(unit);                    //获取绘图区域对象                    BarRenderer3D barRenderer3D = (BarRenderer3D)categoryPlot.getRenderer();                    //设置柱形图的宽度                    barRenderer3D.setMaximumBarWidth(0.07);                    //在图形上显示数字                    barRenderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());                    barRenderer3D.setBaseItemLabelsVisible(true);                    barRenderer3D.setBaseItemLabelFont(new Font("宋体",Font.BOLD,15));                                        //在D盘目录下生成图片                    File file = new File("chart.jpeg");                    try {                        ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);                    } catch (IOException e) {                        e.printStackTrace();                    }                                        //使用ChartFrame对象显示图像                    ChartFrame frame = new ChartFrame("xyz",chart);                    frame.setVisible(true);                    frame.pack();        }        }  
</div> 结果:

20141128102353219.jpg

B、生成折线图

    package com.whp.test;                import java.awt.Font;        import java.awt.Rectangle;        import java.io.File;        import java.io.IOException;                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.CategoryAxis;        import org.jfree.chart.axis.CategoryAxis3D;        import org.jfree.chart.axis.NumberAxis;        import org.jfree.chart.axis.NumberAxis3D;        import org.jfree.chart.axis.NumberTickUnit;        import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;        import org.jfree.chart.plot.CategoryPlot;        import org.jfree.chart.plot.PlotOrientation;        import org.jfree.chart.renderer.category.BarRenderer3D;        import org.jfree.chart.renderer.category.LineAndShapeRenderer;        import org.jfree.data.category.DefaultCategoryDataset;                public class jfreeChart1 {                    public static void main(String[] args) {                // TODO Auto-generated method stub                DefaultCategoryDataset dataset = new DefaultCategoryDataset();                // 添加数据                dataset.addValue(98, "数学", "张三");                dataset.addValue(68, "数学", "李四");                dataset.addValue(56, "数学", "王五");                        JFreeChart chart = ChartFactory.createLineChart("用户统计报表(所属单位)", // 主标题的名称                        "所属单位名称",// X轴的标签                        "数量",// Y轴的标签                        dataset, // 图标显示的数据集合                        PlotOrientation.VERTICAL, // 图像的显示形式(水平或者垂直)                        true,// 是否显示子标题                        true,// 是否生成提示的标签                        true); // 是否生成URL链接                // 处理图形上的乱码                // 处理主标题的乱码                chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));                // 处理子标题乱码                chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));                // 获取图表区域对象                CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();                // 获取X轴的对象                CategoryAxis categoryAxis = (CategoryAxis) categoryPlot.getDomainAxis();                // 获取Y轴的对象                NumberAxis numberAxis = (NumberAxis) categoryPlot.getRangeAxis();                // 处理X轴上的乱码                categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 15));                // 处理X轴外的乱码                categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));                // 处理Y轴上的乱码                numberAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 15));                // 处理Y轴外的乱码                numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));                // 处理Y轴上显示的刻度,以10作为1格                numberAxis.setAutoTickUnitSelection(false);                NumberTickUnit unit = new NumberTickUnit(10);                numberAxis.setTickUnit(unit);                // 获取绘图区域对象                LineAndShapeRenderer lineAndShapeRenderer = (LineAndShapeRenderer) categoryPlot                        .getRenderer();                // 在图形上显示数字                lineAndShapeRenderer                        .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());                lineAndShapeRenderer.setBaseItemLabelsVisible(true);                lineAndShapeRenderer                        .setBaseItemLabelFont(new Font("宋体", Font.BOLD, 15));                // 在图形上添加转折点(使用小矩形显示)                Rectangle shape = new Rectangle(10, 10);                lineAndShapeRenderer.setSeriesShape(0, shape);                lineAndShapeRenderer.setSeriesShapesVisible(0, true);                        //在D盘目录下生成图片                File file = new File("chart1.jpg");                try {                    ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);                } catch (IOException e) {                    e.printStackTrace();                }                // 使用ChartFrame对象显示图像                ChartFrame frame = new ChartFrame("xyz", chart);                frame.setVisible(true);                frame.pack();            }                }  
</div> </div>
结果:

20141128102849875.jpg

C、生成饼图:

</div> </div>
    package com.whp.test;                import java.awt.Font;        import java.awt.Rectangle;        import java.io.File;        import java.io.IOException;                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.CategoryAxis;        import org.jfree.chart.axis.CategoryAxis3D;        import org.jfree.chart.axis.NumberAxis;        import org.jfree.chart.axis.NumberAxis3D;        import org.jfree.chart.axis.NumberTickUnit;        import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;        import org.jfree.chart.labels.StandardPieSectionLabelGenerator;        import org.jfree.chart.plot.CategoryPlot;        import org.jfree.chart.plot.PiePlot3D;        import org.jfree.chart.plot.PlotOrientation;        import org.jfree.chart.renderer.category.BarRenderer3D;        import org.jfree.chart.renderer.category.LineAndShapeRenderer;        import org.jfree.data.category.DefaultCategoryDataset;        import org.jfree.data.general.DefaultPieDataset;                public class jfreeChart3 {                    public static void main(String[] args) {                // TODO Auto-generated method stub                DefaultPieDataset dataset = new DefaultPieDataset();                //添加数据                dataset.setValue("张三",40);                dataset.setValue("李四",32);                dataset.setValue("王五",28);                JFreeChart chart = ChartFactory.createPieChart3D("比重统计报表(所属单位)", //主标题的名称                                              dataset, //图标显示的数据集合                                              true,//是否显示子标题                                               true,//是否生成提示的标签                                               true); //是否生成URL链接                //处理图形上的乱码                //处理主标题的乱码                chart.getTitle().setFont(new Font("宋体",Font.BOLD,18));                //处理子标题乱码                chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,15));                //获取图表区域对象                PiePlot3D categoryPlot = (PiePlot3D)chart.getPlot();                //处理图像上的乱码                categoryPlot.setLabelFont(new Font("宋体",Font.BOLD,15));                //设置图形的生成格式为(上海 2 (10%))                String format = "{0} {1} ({2})";                categoryPlot.setLabelGenerator(new StandardPieSectionLabelGenerator(format));                                //在D盘目录下生成图片                File file = new File("chart2.jpg");                try {                    ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);                } catch (IOException e) {                    e.printStackTrace();                }                //使用ChartFrame对象显示图像                ChartFrame frame = new ChartFrame("xyz",chart);                frame.setVisible(true);                frame.pack();            }                }  

结果:20141128103425394.jpg

来自:blog.csdn.net/wanghaiping1993/article/details/41574915