Java-jfree報表(餅狀圖、柱狀圖、折線統計圖)

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

  • 測試生成報表圖形
  • Created by Jason 2016-7-18 上午7:14:59

*/
public class CharReport_BZT {
/**對象

  • 提供靜態方法:獲取報表圖形1:餅狀圖
  • @param title 標題
  • @param datas 數據
  • @param font 字體

*/
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()));
}
/**

  • 生成一個餅圖的圖表
  • 分別是:顯示圖表的標題、須要提供對應圖表的DateSet對象、是否顯示圖例、是否生成貼士以及是否生成URL連接

*/
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);

/**

  • 設置開始角度(弧度計算)
  • 度 0° 30° 45° 60° 90° 120° 135° 150° 180° 270° 360°
  • 弧度 0 π/6 π/4 π/3 π/2 2π/3 3π/4 5π/6 π 3π/2 2π

*/
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;

/**

  • Created by Jason 2016-7-18 上午8:12:38

*/
public class CharReport_ZZT {

/**

  • 提供靜態方法:獲取報表圖形2:柱狀圖
  • @param title 標題
  • @param datas 數據
  • @param type 分類(第一季,第二季.....)
  • @param danwei 柱狀圖的數量單位
  • @param font 字體

*/
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 {
    /**

    • 提供靜態方法:獲取報表圖形3:折線圖
    • @param title 標題
    • @param datas 數據
    • @param type 分類(第一季,第二季.....)
    • @param danwei 柱狀圖的數量單位
    • @param font 字體

*/
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);

}

}運行效果:

相關文章
相關標籤/搜索