JFreeChart是JAVA平台上的一个开放的图表绘制库,它完全使用JAVA语言编写,是为servlet以及jsp等使用所设计.JFreeChart可生成饼状图(pie charts),柱状图(bar charts)等等,并且可以产生PNG和JPEG格式的输出.
下面是一些常见的例子,希望给您带来帮助,记得要导入jar包哦!
饼状图: package com.java.chart; import java.awt.Font; import java.io.FileOutputStream; import java.io.IOException; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PiePlot3D; import org.jfree.data.general.DefaultPieDataset; public class PieChart { public static void main(String[] args) { // 创建数据集对象 DefaultPieDataset dataset = getDataset(); // 创建JFreeChart对象 JFreeChart chart = ChartFactory.createPieChart3D("文具销量表", dataset, true, true, false); // 处理中文乱码 // 获取CategoryPlot PiePlot3D plot = (PiePlot3D) chart.getPlot(); // 处理标题乱码 chart.getTitle().setFont(new Font("宋体", Font.PLAIN, 18)); // 处理表内容乱码 chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 18)); // 处理数据集乱码 plot.setLabelFont(new Font("宋体", Font.PLAIN, 18)); // 输出 FileOutputStream fos = null; try { fos = new FileOutputStream("d:/a.jpg"); ChartUtilities.writeChartAsJPEG(fos, chart, 600, 400); } catch (Exception e) { System.out.println("生成图片失败!"); }finally { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } System.out.println("生成图片成功!"); } public static DefaultPieDataset getDataset() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("铅笔", 20); dataset.setValue("毛笔", 3); dataset.setValue("钢笔", 10); dataset.setValue("圆珠笔", 30); return dataset; } }柱状图:
package com.java.chart; import java.awt.Color; import java.awt.Font; import java.io.FileOutputStream; import java.io.IOException; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; public class BarChart { public static void main(String[] args) { // 获取一个数据集 CategoryDataset dataSet = getDataSet(); // 创建JFreeChart的对象 JFreeChart freeChart = ChartFactory.createBarChart3D("水果统计图", "品种", "产量",dataSet, PlotOrientation.VERTICAL, true, true, false); // 设置图表的背景色 freeChart.setBackgroundPaint(new Color(0xffffff)); // 处理中文乱码 //创建CategoryPlot对象 CategoryPlot plot = (CategoryPlot) freeChart.getPlot(); // 获取X轴 CategoryAxis axis =plot.getDomainAxis(); // 处理x轴的标题乱码 axis.setLabelFont(new Font("宋体",Font.PLAIN, 18)); // 处理X轴上的乱码 axis.setTickLabelFont(new Font("宋体",Font.PLAIN, 18)); // 获取Y轴 ValueAxis value = plot.getRangeAxis(); //处理Y轴的标题乱码 value.setLabelFont(new Font("宋体", Font.PLAIN, 18)); //处理标题乱码 freeChart.getTitle().setFont(new Font("宋体", Font.PLAIN,18)); // 处理图例乱码 freeChart.getLegend().setItemFont(new Font("宋体",Font.PLAIN, 15)); // 打印图表 FileOutputStream fos = null; try { fos =new FileOutputStream("d:/test3.jpg"); ChartUtilities.writeChartAsJPEG(fos, freeChart, 600, 400); } catch(Exception e) { System.out.println("生成图片失败!"); } finally { // 释放资源 try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } System.out.println("生成图片成功!"); } public static CategoryDatasetgetDataSet() { // 创建DefaultCategoryDataset 对象 DefaultCategoryDataset ds = new DefaultCategoryDataset(); //添加数据进数据集 // 参数解释:第一个参数是数量,第二个参数是类别,第三个参数是横坐标 ds.addValue(100, "水果","苹果"); ds.addValue(200, "水果", "香蕉"); ds.addValue(300, "水果", "橘子"); ds.addValue(400, "水果", "龙眼"); ds.addValue(500, "水果", "栗子"); return ds; } }折线图:
packagecom.java.chart; import java.awt.Font; importjava.io.FileOutputStream; import java.io.IOException; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; public class LineChart { public static void main(String[] args) { CategoryDataset dataset = createDataset(); JFreeChart chart =ChartFactory.createLineChart("一季度销售曲线", // 折线图名称 "时间", // 横坐标名称 "销售额(百万)", // 纵坐标名称 dataset, // 数据 PlotOrientation.VERTICAL, //水平显示图像 true, // 是否需要图例 true, // 是否需要工具 false // 是否需要链接 ); // 处理乱码 // 处理标题 chart.getTitle().setFont(new Font("宋体", Font.PLAIN, 18)); // 获取CategoryPlot CategoryPlot plot = chart.getCategoryPlot(); //获取X轴 CategoryAxis axis = plot.getDomainAxis(); // 处理X轴乱码 axis.setTickLabelFont(new Font("宋体", Font.PLAIN, 18)); // 处理x轴标题乱码 axis.setLabelFont(new Font("宋体", Font.PLAIN, 18)); // 获取Y轴 ValueAxis value = plot.getRangeAxis(); // 处理Y轴乱码 value.setLabelFont(new Font("宋体", Font.PLAIN, 18)); // 处理其他乱码 chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 18)); plot.setRangeGridlinesVisible(true); // 是否显示格子线 plot.setBackgroundAlpha(0.3f); // 设置背景透明度 FileOutputStream fos =null; try { fos = new FileOutputStream("d:/line.jpg"); ChartUtilities.writeChartAsJPEG(fos, chart, 600, 400); } catch(Exception e) { e.printStackTrace(); } finally { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } public static DefaultCategoryDataset createDataset() { DefaultCategoryDataset linedataset = new DefaultCategoryDataset(); // 各曲线名称 String series1= "宝马"; String series2 = "奔驰"; String series3 ="保时捷"; // 横轴名称(列名称) String type1 = "1月"; String type2 = "2月"; String type3 = "3月"; linedataset.addValue(0.0, series1, type1); linedataset.addValue(4.2, series1, type2); linedataset.addValue(3.9, series1, type3); linedataset.addValue(1.0, series2, type1); linedataset.addValue(5.2, series2, type2); linedataset.addValue(7.9, series2, type3); linedataset.addValue(2.0, series3, type1); linedataset.addValue(9.2, series3, type2); linedataset.addValue(8.9, series3, type3); return linedataset; } }