柱状图的绘制:
- 先看一下,不同形状的报表的构成。通过图形可以看出:
- 代码绘制绘制如下:
String title="用户统计报表(所属单位)";//图形的标题 String categoryAxisLabel = "所属单位名称"; //x轴外的坐标 String valueAxisLabel = "数量"; //y轴外的坐标 DefaultCategoryDataset dataset = new DefaultCategoryDataset();//图形的数据集合 dataset.addValue(12, "中国", "北京"); dataset.addValue(6, "中国", "上海"); dataset.addValue(2, "中国", "深圳"); dataset.addValue(9, "美国", "纽约"); dataset.addValue(3, "美国", "洛杉矶"); dataset.addValue(1, "美国", "华盛顿"); PlotOrientation orientation = PlotOrientation.VERTICAL;//图形的显示形式(水平/垂直) boolean legend = true; //是否生成子标题 boolean tooltips = true;//是否在图形上生成工具的提示 boolean urls = true;//是否通过图形生产url //ChartFactory类可以创建,各种图形的报表 JFreeChart chart = ChartFactory.createBarChart3D(title, categoryAxisLabel, valueAxisLabel, dataset, orientation, legend, tooltips, urls); //处理乱码问题: //处理主标题乱码 chart.getTitle().setFont(new Font("宋体",Font.BOLD,22)); //处理子标题乱码 chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,18)); //绘图对象 /** * 方式一:使用debug抓取 * 方式二:使用输出语句System.out.println(chart.getPlot()); * 方式三:查看API */ CategoryPlot plot = (CategoryPlot) chart.getPlot(); //获取x轴对象 CategoryAxis3D categoryAxis3D= (CategoryAxis3D) plot.getDomainAxis(); //获取Y轴对象 NumberAxis3D numberAxis3D = (org.jfree.chart.axis.NumberAxis3D) plot.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轴上的刻度,去掉默认值,采用1为单位 numberAxis3D.setAutoTickUnitSelection(false); NumberTickUnit numberTickUnit = new NumberTickUnit(1); numberAxis3D.setTickUnit(numberTickUnit); //获取绘图区域 BarRenderer3D barRenderer3D = (org.jfree.chart.renderer.category.BarRenderer3D) plot.getRenderer(); //将图像的宽度表小一点,按百分比来算 barRenderer3D.setMaximumBarWidth(0.88); //在图形上生成数字 barRenderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); barRenderer3D.setBaseItemLabelsVisible(true); barRenderer3D.setBaseLegendTextFont(new Font("宋体",Font.BOLD,12)); ChartFrame frame = new ChartFrame("分布图",chart); frame.setVisible(true); frame.pack();
线状图的绘制:
- 线状图的图形表示:
- 代码绘制如下:
String title = "用户统计报表(所属单位)"; String categoryAxisLabel = "所属单位名称"; String valueAxisLabel = "数量"; //构造图象的数据 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(12, "所属单位", "北京"); dataset.addValue(6, "所属单位", "上海"); dataset.addValue(2, "所属单位", "深圳"); PlotOrientation orientation = PlotOrientation.VERTICAL;//图形的显示形式(水平/垂直) boolean legend = true;//是否生成子标题 boolean tooltips = true;//是否在图形上生成工具的提示 boolean urls = true;//是否通过图形生产url //ChartFactory类可以创建,各种图形的报表 JFreeChart chart = ChartFactory.createLineChart(title, categoryAxisLabel, valueAxisLabel, dataset, orientation, legend, tooltips, urls); //处理主标题乱码 chart.getTitle().setFont(new Font("宋体",Font.BOLD,22)); //处理子标题乱码 chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,20)); //获取绘图对象 /** * 方式一:使用debug抓取 * 方式二:使用输出语句System.out.println(chart.getPlot()); * 方式三:查看API */ CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot(); //获取x轴对象 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轴上的刻度,去掉默认值。采用1为单位。 numberAxis.setAutoTickUnitSelection(false); numberAxis.setTickUnit(new NumberTickUnit(1)); //得到绘图区域对象 LineAndShapeRenderer lineAndShapeRenderer = (LineAndShapeRenderer) categoryPlot.getRenderer(); //在图形上生成数字 lineAndShapeRenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); lineAndShapeRenderer.setBaseItemLabelsVisible(true); lineAndShapeRenderer.setBaseItemLabelFont(new Font("宋体",Font.BOLD,12)); //在图形上生成矩形的转折点 Shape shape = new Rectangle(10,10); lineAndShapeRenderer.setSeriesShape(0, shape);//int类型,表示第几条线,0表示第1条线 lineAndShapeRenderer.setSeriesShapesVisible(0, true);//int类型,表示第几条线,0表示第1条线 //生成图形。 ChartFrame frame = new ChartFrame("线性图", chart); frame.setVisible(true); frame.pack();
饼图的绘制:
- 饼图的图像表示:
- 代码绘制如下:
String title = "用户统计报表(所属单位)";//图形的标题 DefaultPieDataset dataset = new DefaultPieDataset();//图形的数据集合 dataset.setValue("北京", 12); dataset.setValue("上海", 6); dataset.setValue("深圳", 2); boolean legend = true;//是否生成子标题 boolean tooltips = true;//是否在图形上生成工具的提示 boolean urls = true;//是否通过图形生产url //ChartFactory类可以创建,各种图形的报表 JFreeChart chart = ChartFactory.createPieChart3D(title, dataset, legend, tooltips, urls); //处理乱码 //设置主标题乱码 chart.getTitle().setFont(new Font("宋体",Font.BOLD,22)); //设置子标题乱码 chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,20)); //获取图标区域对象 /** * 方式一:使用debug抓取 * 方式二:使用输出语句System.out.println(chart.getPlot()); * 方式三:查看API */ PiePlot3D piePlot3D = (PiePlot3D) chart.getPlot(); //处理图形上的乱码 piePlot3D.setLabelFont(new Font("宋体",Font.BOLD,15)); //将北京 12 (60%),显示在图形上 String labelFormat = "{0} {1} ({2})"; piePlot3D.setLabelGenerator(new StandardPieSectionLabelGenerator(labelFormat)); //输出图像 ChartFrame frame = new ChartFrame("饼状图", chart); frame.setVisible(true); frame.pack();