JFreeChart使用
最近项目需要做图形分析,就想到了使用JFreeChart,之前也没有使用过,就现学先用吧。本文主要记录一些主要的代码及学习使用过程。
使用JFreeChart步骤:
一、下载JFreeChart.jar包(两种方式),jar包:jfreechart-*.*.*.jar和jcommon-*.*.*.jar
1 //1、maven获取 2 3 <dependency> 4 <groupId>org.jfree</groupId> 5 <artifactId>jfreechart</artifactId> 6 <version>1.0.19</version> 7 </dependency>
1 //2、官网下载最新的jar 2 http://sourceforge.net/projects/jfreechart/files/
二、获取数据集(模拟数据)
1 private static DefaultCategoryDataset getDefaultDataset(){ 2 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 3 for(int i=1;i<=12;i++){ 4 dataset.addValue(RandomUtils.nextInt(100, 499), "活跃人数", i+""); 5 } 6 return dataset; 7 }
三、生成图标对象JFreeChart
1 //创建折线图jfreechart对象,可以查看下ChartFactory下的方法,创建其他类型的图形 2 JFreeChart chart = ChartFactory.createLineChart("2015年度活跃人数", "月份", "人数", dataset,PlotOrientation.VERTICAL,true,false,false);
ChartFactory的静态创建各类图形:
四、配置JFreeChart图形参数(主要是图形样式、字体样式等)
1 CategoryPlot cp = chart.getCategoryPlot(); 2 cp.setBackgroundPaint(ChartColor.WHITE); // 背景色设置 3 cp.setRangeGridlinePaint(ChartColor.GRAY); // 网格横线线色设置 4 cp.setDomainGridlinePaint(ChartColor.GRAY);//网格竖线 5 LineAndShapeRenderer renderer = (LineAndShapeRenderer) cp.getRenderer(); 6 renderer.setBaseItemLabelsVisible(true); 7 renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT)); 8 renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); 9 renderer.setBaseItemLabelFont(new Font("宋体", 5, 12));
如果只是以上这些操作的话,会出现中文乱码,还需要加上:
1 private static void processChart(JFreeChart chart) { 2 CategoryPlot plot = chart.getCategoryPlot(); 3 CategoryAxis domainAxis = plot.getDomainAxis(); 4 ValueAxis rAxis = plot.getRangeAxis(); 5 chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, 6 RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); 7 TextTitle textTitle = chart.getTitle(); 8 textTitle.setFont(new Font("宋体", Font.PLAIN, 20)); 9 domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11)); 10 domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12)); 11 rAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12)); 12 rAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12)); 13 chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); 14 }
详细的图表样式,参考:http://blog.sina.com.cn/s/blog_6af9cfe80100ygf6.html
输出的结果: