Java-jfree报表(学习整理)----饼状图、柱状图、折线统计图
一、使用的报表工具:
jfree报表
二、下载网址:
http://www.jfree.org/
下载以后先解压:以下图:java
下载后:须要的jar包!以下图:api
开:找到如下的两个jar包 再导入开发项目中: 以后就能够正常使用jfree报表了:
三、jfree报表API文档:工具
http://tool.oschina.net/apidocs/apidoc?api=jfreechart 参考博文:Bannings博客 http://blog.csdn.net/zhangao0086/article/details/6365468
四、直接上测试源码:
4.1饼状图:
[Java] 纯文本查看 复制代码学习
import java.awt.Font;
import java.awt.Image;
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;测试
import javax.imageio.ImageIO;字体
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;.net
/**code
*/
public class CharReport_BZT {
/**对象
*/
public static void createPort(String title,Map<String,Double> datas,Font font){
try {
//若是不使用Font,中文将显示不出来 blog
DefaultPieDataset pds = new DefaultPieDataset();
//获取迭代器:
Set<Entry<String, Double>> set = datas.entrySet();
Iterator iterator=(Iterator) set.iterator();
Entry entry=null;
while(iterator.hasNext()){
entry=(Entry) iterator.next();
pds.setValue(entry.getKey().toString(),Double.parseDouble(entry.getValue().toString()));
}
/**
*/
JFreeChart chart = ChartFactory.createPieChart(title, pds, true, false, true);
//设置图片标题的字体
chart.getTitle().setFont(font);
//获得图块,准备设置标签的字体
PiePlot plot = (PiePlot) chart.getPlot();
//设置分裂效果,须要指定分裂出去的key
plot.setExplodePercent("天使-彦", 0.1);
//设置标签字体
plot.setLabelFont(font);
//设置图例项目字体
chart.getLegend().setItemFont(font);
/**
*/
plot.setStartAngle(new Float(3.14f / 2f));
//设置背景图片,设置最大的背景
Image img = ImageIO.read(new File("f:/test/1.jpg"));
chart.setBackgroundImage(img);
//设置plot的背景图片
img = ImageIO.read(new File("f:/test/2.jpg"));
plot.setBackgroundImage(img);
//设置plot的前景色透明度
plot.setForegroundAlpha(0.7f);
//设置plot的背景色透明度
plot.setBackgroundAlpha(0.0f);
//设置标签生成器(默认{0})
//{0}:key {1}:value {2}:百分比 {3}:sum
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1}票)/{2}"));
//将内存中的图片写到本地硬盘
ChartUtilities.saveChartAsJPEG(new File("f:/test/aa.png"), chart, 600, 300);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Font font = new Font("新宋体", Font.BOLD, 15);
Map<String, Double> map=new HashMap<String, Double>();
map.put("天使-彦", (double) 1000);
map.put("雄兵连-蔷薇", (double) 700);
map.put("太阳之光-蕾娜", (double) 600);
map.put("辅助-琴女", (double) 400);
CharReport_BZT.createPort("超神学院女神投票结果", map, font);
}
}
运行结果:
4.2柱状图:
[Java] 纯文本查看 复制代码
import java.awt.Font;
import java.io.File;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.imageio.ImageIO;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import java.util.List;
import java.util.Map.Entry;
/**
*/
public class CharReport_ZZT {
/**
*/
public static void createPort(String title,Map<String,Map<String,Double>> datas,String type,String danwei,Font font){
try {
//种类数据集
DefaultCategoryDataset ds = new DefaultCategoryDataset();
//获取迭代器:
Set<Entry<String, Map<String, Double>>> set1 = datas.entrySet(); //总数据
Iterator iterator1=(Iterator) set1.iterator(); //第一次迭代
Iterator iterator2=null;
HashMap<String, Double> map = null;
Set<Entry<String,Double>> set2=null;
Entry entry1=null;
Entry entry2=null;
while(iterator1.hasNext()){
entry1=(Entry) iterator1.next(); //遍历分类
map=(HashMap<String, Double>) entry1.getValue();//获得每次分类的详细信息
set2=map.entrySet(); //获取键值对集合
iterator2=set2.iterator(); //再次迭代遍历
while (iterator2.hasNext()) {
entry2= (Entry) iterator2.next();
ds.setValue(Double.parseDouble(entry2.getValue().toString()),//每次统计数量
entry2.getKey().toString(), //名称
entry1.getKey().toString()); //分类
System.out.println("当前:--- "+entry2.getKey().toString()+"--"
+entry2.getValue().toString()+"--"
+entry1.getKey().toString());
}
System.out.println("-------------------------------------");
}
//建立柱状图,柱状图分水平显示和垂直显示两种
JFreeChart chart = ChartFactory.createBarChart(title, type, danwei, ds, PlotOrientation.VERTICAL, true, true, true);
//设置整个图片的标题字体
chart.getTitle().setFont(font);
//设置提示条字体
font = new Font("宋体", Font.BOLD, 15);
chart.getLegend().setItemFont(font);
//获得绘图区
CategoryPlot plot = (CategoryPlot) chart.getPlot();
//获得绘图区的域轴(横轴),设置标签的字体
plot.getDomainAxis().setLabelFont(font);
//设置横轴标签项字体
plot.getDomainAxis().setTickLabelFont(font);
//设置范围轴(纵轴)字体
plot.getRangeAxis().setLabelFont(font);
//存储成图片
//设置chart的背景图片
chart.setBackgroundImage(ImageIO.read(new File("f:/test/1.jpg")));
plot.setBackgroundImage(ImageIO.read(new File("f:/test/2.jpg")));
plot.setForegroundAlpha(1.0f);
ChartUtilities.saveChartAsJPEG(new File("f:/test/bb.png"), chart, 600, 400);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Map<String, Map<String, Double>> datas =new HashMap<String, Map<String,Double>>();
Map<String, Double> map1=new HashMap<String, Double>();
Map<String, Double> map2=new HashMap<String, Double>();
Map<String, Double> map3=new HashMap<String, Double>();
Map<String, Double> map4=new HashMap<String, Double>();
//设置第一期的投票信息
map1.put("天使-彦", (double) 1000);
map1.put("雄兵连-蔷薇", (double) 700);
map1.put("太阳之光-蕾娜", (double) 600);
map1.put("辅助-琴女", (double) 400);
//设置第二期的投票信息
map2.put("天使-彦", (double) 1300);
map2.put("雄兵连-蔷薇", (double) 900);
map2.put("太阳之光-蕾娜", (double) 800);
map2.put("辅助-琴女", (double) 500);
//设置第三期的投票信息
map2.put("天使-彦", (double) 2000);
map3.put("雄兵连-蔷薇", (double) 1700);
map3.put("太阳之光-蕾娜", (double) 1000);
map3.put("辅助-琴女", (double) 1000);
//设置第四期的投票信息
map4.put("天使-彦", (double) 3000);
map4.put("雄兵连-蔷薇", (double) 2500);
map4.put("太阳之光-蕾娜", (double) 1600);
map4.put("辅助-琴女", (double) 1400);
//压入数据
datas.put("第一季", map1);
datas.put("第二季", map2);
datas.put("第三季-神与神", map3);
// datas.put("第四季-黑甲", map4);
Font font = new Font("宋体", Font.BOLD, 20);
CharReport_ZZT.createPort("超神学院前四季最受欢迎的女性角色投票结果",datas,"超神纪元","数量单位(票)",font);
}
}
运行效果:
4.3折线图
[Java] 纯文本查看 复制代码
?
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import javax.imageio.ImageIO;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
/**
Created by Jason 2016-7-18 上午9:13:20
*/
public class CharReport_ZXT {
/**
*/
public static void createPort(String title,Map<String,Map<String,Double>> datas,String type,String danwei,Font font){
try {
//种类数据集
DefaultCategoryDataset ds = new DefaultCategoryDataset();
//获取迭代器:
Set<Entry<String, Map<String, Double>>> set1 = datas.entrySet(); //总数据
Iterator iterator1=(Iterator) set1.iterator(); //第一次迭代
Iterator iterator2=null;
HashMap<String, Double> map = null;
Set<Entry<String,Double>> set2=null;
Entry entry1=null;
Entry entry2=null;
int index=1;
while(iterator1.hasNext()){//4种分类
entry1=(Entry) iterator1.next(); //遍历分类
map=(HashMap<String, Double>) entry1.getValue();//获得每次分类的详细信息
System.err.println(map.size());
set2=map.entrySet(); //获取键值对集合
iterator2=set2.iterator(); //再次迭代遍历
while (iterator2.hasNext()) {//4-4
entry2= (Entry) iterator2.next();
ds.setValue(Double.parseDouble(entry2.getValue().toString()),//每次统计数量
entry2.getKey().toString(), //名称
entry1.getKey().toString()); //分类
System.out.println("当前:--- "+entry2.getKey().toString()+"--"
+entry2.getValue().toString()+"--"
+entry1.getKey().toString());
}
System.out.println("--------------------------");
}
//建立折线图,折线图分水平显示和垂直显示两种
// JFreeChart chart2 = ChartFactory.createLineChart(title, type, danwei, ds,//2D折线图
// PlotOrientation.VERTICAL,
// true, true, true);
JFreeChart chart = ChartFactory.createLineChart3D(title, type, danwei, ds,//3D折线图
PlotOrientation.VERTICAL,
true, true, false);
//设置整个图片的标题字体
chart.getTitle().setFont(font);
//设置提示条字体
font = new Font("宋体", Font.BOLD, 15);
chart.getLegend().setItemFont(font);
//获得绘图区
CategoryPlot plot = (CategoryPlot) chart.getPlot();
//获得绘图区的域轴(横轴),设置标签的字体
plot.getDomainAxis().setLabelFont(font);
//设置横轴标签项字体
plot.getDomainAxis().setTickLabelFont(font);
//设置范围轴(纵轴)字体
font = new Font("宋体", Font.BOLD, 18);
plot.getRangeAxis().setLabelFont(font);
//存储成图片
//设置chart的背景图片
chart.setBackgroundImage(ImageIO.read(new File("f:/test/1.jpg")));
// plot.setBackgroundImage(ImageIO.read(new File("f:/test/2.jpg")));
plot.setForegroundAlpha(1.0f);
ChartUtilities.saveChartAsJPEG(new File("f:/test/cc.png"), chart, 800, 400);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Map<String, Map<String, Double>> datas =new HashMap<String, Map<String,Double>>();
Map<String, Double> map1=new HashMap<String, Double>();
Map<String, Double> map2=new HashMap<String, Double>();
Map<String, Double> map3=new HashMap<String, Double>();
Map<String, Double> map4=new HashMap<String, Double>();
//设置第一期的投票信息
map1.put("蔷薇", (double) 700);
map1.put("彦", (double) 1000);
map1.put("蕾娜", (double) 600);
map1.put("琴女", (double) 400);
//设置第二期的投票信息
map2.put("蔷薇", (double) 900);
map2.put("彦", (double) 2000);
map2.put("蕾娜", (double) 800);
map2.put("琴女", (double) 500);
//设置第三期的投票信息
map3.put("蔷薇", (double) 1700);
map3.put("彦", (double) 1000);
map3.put("蕾娜", (double) 1400);
map3.put("琴女", (double) 1000);
//设置第四期的投票信息
map4.put("蔷薇", (double) 2500);
map4.put("彦", (double) 3000);
map4.put("蕾娜", (double) 1600);
map4.put("琴女", (double) 1400);
//压入数据
datas.put("第一季", map1);
datas.put("第二季", map2);
datas.put("第三季", map3);
datas.put("第四季", map4);
Font font = new Font("宋体", Font.BOLD, 20);
CharReport_ZXT.createPort("超神学院前四季最受欢迎的女性角色投票结果",datas,"超神纪元","数量单位(票)",font);
}
}运行效果: