柱状图的绘制:
- 先看一下,不同形状的报表的构成。通过图形可以看出:
- 代码绘制绘制如下:
- 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();