使用jfreechart生成柱狀圖、折線圖、和餅狀圖
來源:程序員人生 發(fā)布時(shí)間:2014-12-15 09:17:37 閱讀次數(shù):3126次
JFreeChart是JAVA平臺(tái)上的1個(gè)開放的圖表繪制類庫。它完全使用JAVA語言編寫,是為applications,
applets, servlets 和JSP等使用所設(shè)計(jì)。下面我就詳細(xì)介紹如何使用jfreechart生成柱狀圖、折線圖、和餅狀圖。
步驟:
①、導(dǎo)入其相應(yīng)的jcommon⑴.0.16.jar和jfreechart⑴.0.13.jar文件(可點(diǎn)擊下載)
②、下面就能夠?qū)憣?shí)現(xiàn)各種圖形的代碼了
A、生成柱狀圖:
<span style="font-size:18px;">package com.whp.test;
import java.awt.Font;
import java.io.File;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis3D;
import org.jfree.chart.axis.NumberAxis3D;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.data.category.DefaultCategoryDataset;
public class jfreeChart {
public static void main(String[] args) {
// TODO Auto-generated method stub
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
//添加數(shù)據(jù)
dataset.addValue(98, "數(shù)學(xué)", "張3");
dataset.addValue(87, "語文", "張3");
dataset.addValue(68, "數(shù)學(xué)", "李4");
dataset.addValue(89, "語文", "李4");
dataset.addValue(56, "數(shù)學(xué)", "王5");
dataset.addValue(96, "語文", "王5");
JFreeChart chart=ChartFactory.createBarChart3D(
"成績統(tǒng)計(jì)表",
"學(xué)生姓名",//X軸的標(biāo)簽
"分?jǐn)?shù)",//Y軸的標(biāo)簽
dataset, //圖標(biāo)顯示的數(shù)據(jù)集合
PlotOrientation.VERTICAL, //圖象的顯示情勢(shì)(水平或垂直)
true,//是不是顯示子標(biāo)題
true,//是不是生成提示的標(biāo)簽
true); //是不是生成URL鏈接
//處理圖形上的亂碼
//處理主標(biāo)題的亂碼
chart.getTitle().setFont(new Font("宋體",Font.BOLD,18));
//處理子標(biāo)題亂碼
chart.getLegend().setItemFont(new Font("宋體",Font.BOLD,15));
//獲得圖表區(qū)域?qū)ο? CategoryPlot categoryPlot = (CategoryPlot)chart.getPlot();
//獲得X軸的對(duì)象
CategoryAxis3D categoryAxis3D = (CategoryAxis3D)categoryPlot.getDomainAxis();
//獲得Y軸的對(duì)象
NumberAxis3D numberAxis3D = (NumberAxis3D)categoryPlot.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軸上顯示的刻度,以10作為1格
numberAxis3D.setAutoTickUnitSelection(false);
NumberTickUnit unit = new NumberTickUnit(10);
numberAxis3D.setTickUnit(unit);
//獲得繪圖區(qū)域?qū)ο? BarRenderer3D barRenderer3D = (BarRenderer3D)categoryPlot.getRenderer();
//設(shè)置柱形圖的寬度
barRenderer3D.setMaximumBarWidth(0.07);
//在圖形上顯示數(shù)字
barRenderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
barRenderer3D.setBaseItemLabelsVisible(true);
barRenderer3D.setBaseItemLabelFont(new Font("宋體",Font.BOLD,15));
//在D盤目錄下生成圖片
File file = new File("chart.jpeg");
try {
ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);
} catch (IOException e) {
e.printStackTrace();
}
//使用ChartFrame對(duì)象顯示圖象
ChartFrame frame = new ChartFrame("xyz",chart);
frame.setVisible(true);
frame.pack();
}
}
</span>
結(jié)果:

B、生成折線圖
package com.whp.test;
import java.awt.Font;
import java.awt.Rectangle;
import java.io.File;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryAxis3D;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberAxis3D;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
public class jfreeChart1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
// 添加數(shù)據(jù)
dataset.addValue(98, "數(shù)學(xué)", "張3");
dataset.addValue(68, "數(shù)學(xué)", "李4");
dataset.addValue(56, "數(shù)學(xué)", "王5");
JFreeChart chart = ChartFactory.createLineChart("用戶統(tǒng)計(jì)報(bào)表(所屬單位)", // 主標(biāo)題的名稱
"所屬單位名稱",// X軸的標(biāo)簽
"數(shù)量",// Y軸的標(biāo)簽
dataset, // 圖標(biāo)顯示的數(shù)據(jù)集合
PlotOrientation.VERTICAL, // 圖象的顯示情勢(shì)(水平或垂直)
true,// 是不是顯示子標(biāo)題
true,// 是不是生成提示的標(biāo)簽
true); // 是不是生成URL鏈接
// 處理圖形上的亂碼
// 處理主標(biāo)題的亂碼
chart.getTitle().setFont(new Font("宋體", Font.BOLD, 18));
// 處理子標(biāo)題亂碼
chart.getLegend().setItemFont(new Font("宋體", Font.BOLD, 15));
// 獲得圖表區(qū)域?qū)ο? CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();
// 獲得X軸的對(duì)象
CategoryAxis categoryAxis = (CategoryAxis) categoryPlot.getDomainAxis();
// 獲得Y軸的對(duì)象
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軸上顯示的刻度,以10作為1格
numberAxis.setAutoTickUnitSelection(false);
NumberTickUnit unit = new NumberTickUnit(10);
numberAxis.setTickUnit(unit);
// 獲得繪圖區(qū)域?qū)ο? LineAndShapeRenderer lineAndShapeRenderer = (LineAndShapeRenderer) categoryPlot
.getRenderer();
// 在圖形上顯示數(shù)字
lineAndShapeRenderer
.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
lineAndShapeRenderer.setBaseItemLabelsVisible(true);
lineAndShapeRenderer
.setBaseItemLabelFont(new Font("宋體", Font.BOLD, 15));
// 在圖形上添加轉(zhuǎn)折點(diǎn)(使用小矩形顯示)
Rectangle shape = new Rectangle(10, 10);
lineAndShapeRenderer.setSeriesShape(0, shape);
lineAndShapeRenderer.setSeriesShapesVisible(0, true);
//在D盤目錄下生成圖片
File file = new File("chart1.jpg");
try {
ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);
} catch (IOException e) {
e.printStackTrace();
}
// 使用ChartFrame對(duì)象顯示圖象
ChartFrame frame = new ChartFrame("xyz", chart);
frame.setVisible(true);
frame.pack();
}
}
結(jié)果:

C、生成餅圖:
package com.whp.test;
import java.awt.Font;
import java.awt.Rectangle;
import java.io.File;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryAxis3D;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberAxis3D;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
public class jfreeChart3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
DefaultPieDataset dataset = new DefaultPieDataset();
//添加數(shù)據(jù)
dataset.setValue("張3",40);
dataset.setValue("李4",32);
dataset.setValue("王5",28);
JFreeChart chart = ChartFactory.createPieChart3D("比重統(tǒng)計(jì)報(bào)表(所屬單位)", //主標(biāo)題的名稱
dataset, //圖標(biāo)顯示的數(shù)據(jù)集合
true,//是不是顯示子標(biāo)題
true,//是不是生成提示的標(biāo)簽
true); //是不是生成URL鏈接
//處理圖形上的亂碼
//處理主標(biāo)題的亂碼
chart.getTitle().setFont(new Font("宋體",Font.BOLD,18));
//處理子標(biāo)題亂碼
chart.getLegend().setItemFont(new Font("宋體",Font.BOLD,15));
//獲得圖表區(qū)域?qū)ο? PiePlot3D categoryPlot = (PiePlot3D)chart.getPlot();
//處理圖象上的亂碼
categoryPlot.setLabelFont(new Font("宋體",Font.BOLD,15));
//設(shè)置圖形的生成格式為(上海 2 (10%))
String format = "{0} {1} ({2})";
categoryPlot.setLabelGenerator(new StandardPieSectionLabelGenerator(format));
//在D盤目錄下生成圖片
File file = new File("chart2.jpg");
try {
ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);
} catch (IOException e) {
e.printStackTrace();
}
//使用ChartFrame對(duì)象顯示圖象
ChartFrame frame = new ChartFrame("xyz",chart);
frame.setVisible(true);
frame.pack();
}
}
結(jié)果:

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)