概述
1.创建数据集对象
DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
2.创建JFreeChart
JFreeChart chart = ChartFactory.createBarChart3D();
或者
JFreeChart chart = new JFreeChart();
3.创建呈现媒介,并将chart装入媒介
ChartFrame cf = new ChartFrame();
或者:
String fileName = ServletUtilities.saveChartAsJPEG(ChartUtil.createChart(), 450, 300, session);
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;
1.实验1
1.1代码
package testJava2;
import java.awt.Font;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
public class JFreeChartTest2 {
/**
* 创建数据集合
* @return dataSet
*/
public static CategoryDataset createDataSet() {
// 实例化DefaultCategoryDataset对象
DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
// 向数据集合中添加数据
dataSet.addValue(7, "水果", "苹果");
dataSet.addValue(8, "水果", "橘子");
dataSet.addValue(4, "水果", "西瓜");
return dataSet;
}
/**
* 创建JFreeChart对象
* @return chart
*/
public static JFreeChart createChart() {
StandardChartTheme standardChartTheme = new StandardChartTheme("CN"); //创建主题样式
standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20)); //设置标题字体
standardChartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 15)); //设置图例的字体
standardChartTheme.setLargeFont(new Font("宋体", Font.PLAIN, 15)); //设置轴向的字体
ChartFactory.setChartTheme(standardChartTheme);//设置主题样式
// 通过ChartFactory创建JFreeChart
JFreeChart chart = ChartFactory.createBarChart3D(
"水果销量统计", //图表标题
"水果", //横轴标题
"销量(本)",//纵轴标题
createDataSet(),//数据集合
PlotOrientation.VERTICAL, //图表方向
true,//是否显示图例标识
false,//是否显示tooltips
false);//是否支持超链接
return chart;
}
// 本地测试
public static void main(String[] args) {
ChartFrame cf = new ChartFrame("Test", createChart());
cf.pack();
cf.setVisible(true);
}
}
1.2实验结果
2 实验2
2.1 代码
package testJava2;
import java.awt.Font;
import java.awt.Image;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.awt.Font;
import java.awt.Image;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.VerticalAlignment;
public class JFreeChartTest {
/**
* 创建数据集合
* @return dataSet
*/
public static CategoryDataset createDataSet() {
// 实例化DefaultCategoryDataset对象
DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
// 添加第一季度数据
dataSet.addValue(6, "第一季度", "苹果");
dataSet.addValue(3, "第一季度", "橘子");
dataSet.addValue(12, "第一季度", "西瓜");
// 添加第二季度数据
dataSet.addValue(8, "第二季度", "苹果");
dataSet.addValue(7, "第二季度", "橘子");
dataSet.addValue(2, "第二季度", "西瓜");
// 添加第三季度数据
dataSet.addValue(4, "第三季度", "苹果");
dataSet.addValue(5, "第三季度", "橘子");
dataSet.addValue(8, "第三季度", "西瓜");
// 添加第四季度数据
dataSet.addValue(8, "第四季度", "苹果");
dataSet.addValue(2, "第四季度", "橘子");
dataSet.addValue(9, "第四季度", "西瓜");
return dataSet;
}
/**
* 创建JFreeChart对象
* @return chart
*/
public static JFreeChart createChart() {
StandardChartTheme standardChartTheme = new StandardChartTheme("CN"); //创建主题样式
standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20)); //设置标题字体
standardChartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 15)); //设置图例的字体
standardChartTheme.setLargeFont(new Font("宋体", Font.PLAIN, 15)); //设置轴向的字体
ChartFactory.setChartTheme(standardChartTheme);//设置主题样式
// 通过ChartFactory创建JFreeChart
JFreeChart chart = ChartFactory.createBarChart3D(
"水果销量统计", //图表标题
"水果", //横轴标题
"销量(本)",//纵轴标题
createDataSet(),//数据集合
PlotOrientation.VERTICAL, //图表方向
true,//是否显示图例标识
false,//是否显示tooltips
false);//是否支持超链接
// 背景图片
Image image = null;
try {
// 创建背景图片
image = ImageIO.read(JFreeChartTest.class.getResource("test.jpg"));
} catch (IOException e){
e.printStackTrace();
}
chart.getTitle().setFont(new Font("隶书", Font.BOLD, 25)); // 设置标题字体
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); // 设置图例类别字体
chart.setBorderVisible(true); // 设置显示边框
TextTitle subTitle = new TextTitle("2012年水果全国销量统计(苹果, 橘子, 西瓜)");//实例化TextTitle对象
subTitle.setVerticalAlignment(VerticalAlignment.BOTTOM); //设置居中显示
chart.addSubtitle(subTitle);//添加子标题
CategoryPlot plot = chart.getCategoryPlot(); // 获取绘图区对象
plot.setForegroundAlpha(0.8F);//设置绘图区前景色透明度
plot.setBackgroundAlpha(0.5F);//设置绘图区背景色透明度
plot.setBackgroundImage(image);//设置绘图区背景图片
CategoryAxis categoryAxis = plot.getDomainAxis();//获取坐标轴对象
categoryAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));//设置坐标轴标题字体
categoryAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 12));//设置坐标轴尺值字体
categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);// 设置坐标轴标题旋转角度
ValueAxis valueAxis = plot.getRangeAxis();// 设置数据轴对象
valueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
BarRenderer3D renderer = new BarRenderer3D();
renderer.setItemMargin(0.32); // 设置柱间的间距
plot.setRenderer(renderer);// 设置图片渲染对象
return chart;
}
// 本地测试
public static void main(String[] args) {
//System.out.println("ddddddddd");
ChartFrame cf = new ChartFrame("Test", createChart());
cf.pack();
cf.setVisible(true);
}
}
2.2 实验结果
补记: