关闭

JFreechart技术入门和介绍

标签: jfreechart图像报表
14598人阅读 评论(0) 收藏 举报
分类:

柱状图的绘制:

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

3
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    欢迎关注个人微信号
      欢迎关注微信账号:在路上的coder .每天一篇java相关或互联网相关的文章




    个人资料
    • 访问:809943次
    • 积分:2828
    • 等级:
    • 排名:第14202名
    • 原创:86篇
    • 转载:4篇
    • 译文:0篇
    • 评论:25条
    资源分享地址
    个人博客地址
    博客专栏
    最新评论