资源描述
Jfreechart的基础图表用法与在web项目中调用
下面是我自己学习时测试的例子,一天就可以搞定,写的比较简单,基本的功能都有,具体的属性百度,一般的都有解答,希望能够对你们有所帮助
jar包环境
到官网http://www.jfree.org/jfreechart/下载资源包文件
将包文件放到你的项目里面,直接写java类,可以在java类的main方法里面直接生成图片
如例子
public class BarChartDemo {
/**
* 获取一个演示用的组合数据集对象
*
* @return
*/
private static CategoryDataset getDataSet() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "北京", "苹果");
dataset.addValue(120, "上海", "苹果");
dataset.addValue(160, "广州", "苹果");
dataset.addValue(210, "北京", "梨子");
dataset.addValue(220, "上海", "梨子");
dataset.addValue(230, "广州", "梨子");
dataset.addValue(330, "北京", "葡萄");
dataset.addValue(340, "上海", "葡萄");
dataset.addValue(340, "广州", "葡萄");
dataset.addValue(420, "北京", "香蕉");
dataset.addValue(430, "上海", "香蕉");
dataset.addValue(400, "广州", "香蕉");
dataset.addValue(510, "北京", "荔枝");
dataset.addValue(530, "上海", "荔枝");
dataset.addValue(510, "广州", "荔枝");
return dataset;
}
/**
* 解决图表汉字显示问题
*
* @param chart
*/
private static void processChart(JFreeChart chart) {
CategoryPlot plot = chart.getCategoryPlot();
CategoryAxis domainAxis = plot.getDomainAxis();
ValueAxis rAxis = plot.getRangeAxis();
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
rAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
rAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
//3d时设置
/* BarRenderer3D renderer = (BarRenderer3D) plot.getRenderer();
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());//设置柱子上显示文字
renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12));
renderer.setItemLabelsVisible(true);*/
//2d
BarRenderer renderer = (BarRenderer) plot.getRenderer();
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());//设置柱子上显示文字
renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12));
renderer.setItemLabelsVisible(true);
}
/**
* 输出图片
*
* @param chart
*/
private static void writeChartAsImage(JFreeChart chart) {
FileOutputStream fos_jpg = null;
try {
fos_jpg = new FileOutputStream("D:\\test\\fruit.jpg");
ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 400, 300, null);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fos_jpg.close();
} catch (Exception e) {
}
}
}
public void createZhu(){
// 1. 得到数据
CategoryDataset dataset = getDataSet();
// 2. 构造chart
JFreeChart chart = ChartFactory.createBarChart3D(
"水果产量图", // 图表标题
"水果", // 目录轴的显示标签--横轴
"产量", // 数值轴的显示标签--纵轴
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、
true, // 是否显示图例(对于简单的柱状图必须
false, // 是否生成工具
false // 是否生成URL链接
);
// 3. 处理chart中文显示问题
processChart(chart);
// 4. chart输出图片
writeChartAsImage(chart);
// 5. chart 以swing形式输出
ChartFrame pieFrame = new ChartFrame("XXX", chart);
pieFrame.pack();
pieFrame.setVisible(true);
}
public static void main(String[] args) throws IOException {
BarChartDemo demo = new BarChartDemo();
//demo.createZhu();//3d条形图
}
}
效果图如下
饼状图代码
//3D饼状图
public void createPieChart3D() {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("苹果", 250);
dataset.setValue("桔子", 350);
dataset.setValue("梨子", 200);
dataset.setValue("香蕉", 50);
dataset.setValue("荔枝", 150);
JFreeChart chart = ChartFactory.createPieChart3D("水果产量比率图", dataset,
true, true, true);
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("黑体",Font.BOLD,15));//标题设置字体
PiePlot3D plot = (PiePlot3D) chart.getPlot();
plot.setLabelFont(new Font("黑体", Font.TRUETYPE_FONT, 15));
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0},{1},({2})",
NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%")));
chart.getLegend().setItemFont(new Font("宋体",Font.BOLD, 15));
// 设置开始角度
plot.setStartAngle(150D);
// 设置方向为"顺时针方向"
plot.setDirection(Rotation.CLOCKWISE);
// 设置透明度,0.5F为半透明,1为不透明,0为全透明
plot.setForegroundAlpha(1F);
// 没有数据的时候显示的内容
plot.setNoDataMessage("无数据显示");
// 背景色设置
plot.setBackgroundPaint(ChartColor.WHITE);
try {
ChartUtilities.saveChartAsPNG(new File("D:\\test\\PieChart3D.png"),
chart, 800, 500);
} catch (IOException e) {
e.printStackTrace();
}
}
//2d饼状图代码
//柱状2d柱状
public void createColumnChart() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "北京", "苹果");
dataset.addValue(100, "上海", "苹果");
dataset.addValue(100, "广州", "苹果");
dataset.addValue(200, "北京", "梨子");
dataset.addValue(200, "上海", "梨子");
dataset.addValue(200, "广州", "梨子");
dataset.addValue(300, "北京", "葡萄");
dataset.addValue(300, "上海", "葡萄");
dataset.addValue(300, "广州", "葡萄");
dataset.addValue(400, "北京", "香蕉");
dataset.addValue(400, "上海", "香蕉");
dataset.addValue(400, "广州", "香蕉");
dataset.addValue(500, "北京", "荔枝");
dataset.addValue(500, "上海", "荔枝");
dataset.addValue(500, "广州", "荔枝");
JFreeChart chart = ChartFactory.createBarChart("水果产量图", "水量", "产量",
dataset, PlotOrientation.VERTICAL, true, true, true);
processChart(chart);
try {
ChartUtilities.saveChartAsPNG(new File("D:\\test\\ColumnChart.png"),
chart, 800, 500);
} catch (IOException e) {
e.printStackTrace();
}
}
2d折线图代码
//2d折线图
public void createLineChart() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "北京", "苹果");
dataset.addValue(200, "上海", "苹果");
dataset.addValue(300, "广州", "苹果");
dataset.addValue(400, "北京", "梨子");
dataset.addValue(500, "上海", "梨子");
dataset.addValue(600, "广州", "梨子");
dataset.addValue(700, "北京", "葡萄");
dataset.addValue(800, "上海", "葡萄");
dataset.addValue(900, "广州", "葡萄");
dataset.addValue(800, "北京", "香蕉");
dataset.addValue(700, "上海", "香蕉");
dataset.addValue(600, "广州", "香蕉");
dataset.addValue(500, "北京", "荔枝");
dataset.addValue(400, "上海", "荔枝");
dataset.addValue(300, "广州", "荔枝");
JFreeChart chart = ChartFactory.createLineChart("水果产量图 ", "水果", "产量",
dataset, PlotOrientation.VERTICAL, true, true, true);
CategoryPlot plot = chart.getCategoryPlot();
plot.setBackgroundPaint(ChartColor.WHITE); // 背景色设置
plot.setRangeGridlinePaint(ChartColor.GRAY); // 网格线色设置
CategoryAxis domainAxis = plot.getDomainAxis();
ValueAxis rAxis = plot.getRangeAxis();
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
rAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
rAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());//设置柱子上显示文字
renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12));
renderer.setItemLabelsVisible(true);
try {
ChartUtilities.saveChartAsPNG(new File("D:\\test\\LineChart.png"),
chart, 800, 500);
} catch (IOException e) {
e.printStackTrace();
}
}
3d折线图代码
public void createLineChart3D() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(300, "北京", "苹果");
dataset.addValue(100, "上海", "苹果");
dataset.addValue(900, "广州", "苹果");
dataset.addValue(200, "北京", "梨子");
dataset.addValue(200, "上海", "梨子");
dataset.addValue(700, "广州", "梨子");
dataset.addValue(300, "北京", "葡萄");
dataset.addValue(300, "上海", "葡萄");
dataset.addValue(300, "广州", "葡萄");
dataset.addValue(400, "北京", "香蕉");
dataset.addValue(800, "上海", "香蕉");
dataset.addValue(400, "广州", "香蕉");
dataset.addValue(100, "北京", "荔枝");
dataset.addValue(500, "上海", "荔枝");
dataset.addValue(500, "广州", "荔枝");
JFreeChart chart = ChartFactory.createLineChart3D("水果产量图 ", "水果", "产量",
dataset, PlotOrientation.VERTICAL, true, true, true);
CategoryPlot plot = chart.getCategoryPlot();
plot.setBackgroundPaint(ChartColor.WHITE); // 背景色设置
plot.setRangeGridlinePaint(ChartColor.GRAY); // 网格线色设置
CategoryAxis domainAxis = plot.getDomainAxis();
ValueAxis rAxis = plot.getRangeAxis();
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
rAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
rAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());//设置柱子上显示文字
renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12));
renderer.setItemLabelsVisible(true);
try {
ChartUtilities.saveChartAsPNG(new File("D:\\test\\LineChart3D.png"),
chart, 800, 500);
} catch (IOException e) {
e.printStackTrace();
}
}
点与折线结合的图代码如下
package chart.demo02;
import java.awt.Font;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
//点状图与折线一起显示
public class pointAndLine {
public static void main(String[] args) {
JFreeChart chart = createChart(createDataset());
try {
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("黑体",Font.BOLD,15));//标题设置字体
ChartUtilities.saveChartAsPNG(new File("D:\\test\\pointAndLine.png"),
chart, 800, 500);
} catch (IOException e) {
e.printStackTrace();
}
}
private static XYDataset createDataset()
{
XYSeries xyseries = new XYSeries("点状图");
xyseries.add(1.0D, 1.0D);
xyseries.add(2D, 4D);
xyseries.add(3D, 3D);
xyseries.add(4D, 5D);
xyseries.add(5D, 5D);
xyseries.add(6D, 7D);
xyseries.add(7D, 7D);
xyseries.add(8D, 8D);
XYSeries xyseries1 = new XYSeries("折线图");
xyseries1.add(1.0D, 5D);
xyseries1.add(2D, 7D);
xyseries1.add(3D, 6D);
xyseries1.add(4D, 8D);
xyseries1.add(5D, 4D);
xyseries1.add(6D, 4D);
xyseries1.add(7D, 2D);
xyseries1.add(8D, 1.0D);
XYSeriesCollection xyseriescollection = new XYSeriesCollection();
xyseriescollection.addSeries(xyseries);
xyseriescollection.addSeries(xyseries1);
return xyseriescollection;
}
private static JFreeChart createChart(XYDataset xydataset)
{
JFreeChart jfreechart = ChartFactory.createXYLineChart("点图与折线图", "X轴", "Y轴", xydataset, PlotOrientation.VERTICAL, true, true, false);
XYPlot xyplot = (XYPlot)jfreechart.getPlot();
ValueAxis valueAxis=xyplot.getDomainAxis(); //x轴
valueAxis.setLabelFont( new Font("黑体",
Font.BOLD, 12)); //x轴字体
XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer();
xylineandshaperenderer.setSeriesLinesVisible(0, false);
xylineandshaperenderer.setSeriesShapesVisible(1, false);
xylineandshaperenderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator());
xyplot.setRenderer(xylineandshaperenderer);
NumberAxis numberaxis = (NumberAxis)xyplot.getRangeAxis();//y轴
// 设置y轴上的字体
numberaxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 13));
// 设置y轴上的标题字体
numberaxis.setLabelFont(new Font("宋体", Font.PLAIN, 13));
jfreechart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 13)); //x副标题的字体
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
return jfreechart;
}
}
结果
Web项目中jsp调用
在web.xml中配置信息
<!-- jfreechart配置 -->
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/DisplayChart</url-pattern>
</servlet-mapping>
1. jsp例子 基础调用
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="org.jfree.chart.*,org.jfree.chart.plot.*,org.jfree.chart.labels.*,
org.jfree.data.category.*,java.awt.*,org.jfree.ui.*,org.jfree.chart.renderer.category.BarRenderer,
org.jfree.chart.servlet.*,org.jfree.chart.plot.PlotOrientation,java.awt.*"%>
<%@page import="org.jfree.chart.axis.CategoryAxis"%>
<%@page import="org.jfree.chart.axis.ValueAxis"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>jfreeChart报表显示</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(390, "中国", "河南");
dataset.addValue(220, "中国", "河北");
dataset.addValue(510
展开阅读全文