以下为代码:
package org.tie;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.RenderingHints;
import java.io.FileOutputStream;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.CategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
/**
*
* 包名:org.tie<br>
*
* 类名:TestJFreeChart.java<br>
*
* 类概要:测试JFreeChart<br>
*
* @author:TIE
*
* @version:1.0
*
* 作成日:2007/07/13<br>
*
*/
public class TestJFreeChart {
/**
*
* 包名:org.tie<br>
*
* 类名:LabelGenerator.java<br>
*
* 类概要:设置柱状体顶端的数据显示<br>
*
* @author:TIE
*
* @version:1.0
*
* 作成日:2007/07/13<br>
*
*/
static class LabelGenerator implements CategoryItemLabelGenerator {
private double threshold;
public LabelGenerator(double threshold) {
this.threshold = threshold;
}
public String generateLabel(CategoryDataset dataset, int row, int column) {
String result = null;
final Number value = dataset.getValue(row, column);
if (value != null) {
final double v = value.doubleValue();
if (v > this.threshold) {
result = value.toString();
}
}
return result;
}
public String generateRowLabel(CategoryDataset dataset, int row) {
return null;
}
public String generateColumnLabel(CategoryDataset dataset, int column) {
return null;
}
}
/**
* 方法名:createDataset<br>
*
* 方法概要:创建数据集合<br>
*
* @param void
*
* @return void
*
* 作成日:2007/07/13
*/
private static CategoryDataset createDataset() {
String s1 = "苹果";
String s2 = "桔子";
String s3 = "鸭梨";
String s4 = "香蕉";
String c1 = "北京";
String c2 = "上海";
String c3 = "大连";
String c4 = "青岛";
String c5 = "哈尔滨";
/*-------------封装图表使用的数据集-------------*/
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.setValue(1.0, s1, c1);
dataset.setValue(2.0, s1, c2);
dataset.setValue(3.0, s1, c3);
dataset.setValue(4.0, s1, c4);
dataset.setValue(5.0, s1, c5);
dataset.setValue(5.0, s2, c1);
dataset.setValue(4.0, s2, c2);
dataset.setValue(3.0, s2, c3);
dataset.setValue(2.0, s2, c4);
dataset.setValue(1.0, s2, c5);
dataset.setValue(1.0, s3, c1);
dataset.setValue(2.0, s3, c2);
dataset.setValue(3.0, s3, c3);
dataset.setValue(2.0, s3, c4);
dataset.setValue(1.0, s3, c5);
dataset.setValue(1.0, s4, c1);
dataset.setValue(2.0, s4, c2);
dataset.setValue(3.0, s4, c3);
dataset.setValue(4.0, s4, c4);
dataset.setValue(5.0, s4, c5);
return dataset;
}
/**
* 方法名:main<br>
*
* 方法概要:入口方法<br>
*
* @param String args[]
*
* @return void
*
* 作成日:2007/07/13
*/
public static void main(String args[]) {
// 数据集合
CategoryDataset dataset = createDataset();
// 图表
JFreeChart chart = ChartFactory.createBarChart(
"图表标题", // 图表标题
"X轴标题", // X轴标题
"Y轴标题", // Y轴标题
dataset, // 数据集合
PlotOrientation.VERTICAL, // 图表显示方向(水平、垂直)
true, // 是否使用图例
true, // 是否使用工具提示
false // 是否为图表增加URL
);
// 设置图表属性
// 设置整个图表背景颜色
chart.setBackgroundPaint(Color.GRAY);
// 取得CategoryPlot,设定Plot参数
CategoryPlot plot = chart.getCategoryPlot();
// 设置图表的显示部分的背景色
plot.setBackgroundPaint(Color.PINK);
// 设置垂直网格线颜色
plot.setDomainGridlinePaint(Color.black);
// 设置是否显示垂直网格线
plot.setDomainGridlinesVisible(true);
// 设置水平网格线颜色
plot.setRangeGridlinePaint(Color.yellow);
// 设置是否显示水平网格线
plot.setRangeGridlinesVisible(true);
// 取得NumberAxis,将数据转换为整数形式
final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
// 设置是否在柱状图的状态条上显示边框
BarRenderer render = (BarRenderer) plot.getRenderer();
render.setItemMargin(0.1);
// 设置柱状图的渐变色
CategoryItemRenderer renderer = (CategoryItemRenderer) plot.getRenderer();
GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, new Color(255,
200, 80), 0.0f, 0.0f, new Color(255, 255, 40));
GradientPaint gp1 = new GradientPaint(0.0f, 0.0f, new Color(50,
255, 50), 0.0f, 0.0f, new Color(100, 255, 100));
GradientPaint gp2 = new GradientPaint(0.0f, 0.0f, Color.red, 0.0f,
0.0f, new Color(255, 100, 100));
GradientPaint gp3 = new GradientPaint(0.0f, 0.0f, new Color(108,
108, 255), 0.0f, 0.0f, new Color(150, 150, 200));
renderer.setSeriesPaint(0, gp0);
renderer.setSeriesPaint(1, gp1);
renderer.setSeriesPaint(2, gp2);
renderer.setSeriesPaint(3, gp3);
//设置X轴标题的倾斜程度
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setCategoryLabelPositions(CategoryLabelPositions
.createUpRotationLabelPositions(1.57));
// 设置柱状体与图片边框的左右间距
domainAxis.setLowerMargin(0.01);
domainAxis.setUpperMargin(0.01);
// 设置柱状体与图片边框的上下间距
ValueAxis rAxis = plot.getRangeAxis();
rAxis.setUpperMargin(0.15);
rAxis.setLowerMargin(0.15);
// 设置每一组柱状体之间的间隔
render.setItemMargin(0.0);
// 设置消除字体的锯齿渲染(解决中文问题)
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
// 设置标题字体
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("黑体", Font.PLAIN, 20));
// 设置X轴坐标上的文字
domainAxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 11));
// 设置X轴的标题文字
domainAxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));
// 设置Y轴坐标上的文字
rAxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 12));
// 设置Y轴的标题文字
rAxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));
// 设置柱状体上的显示的字体
renderer.setItemLabelGenerator(new LabelGenerator(0.0));
renderer.setItemLabelFont(new Font("黑体", Font.PLAIN, 12));
renderer.setItemLabelsVisible(true);
// 向磁盘输出图片文件
FileOutputStream fos = null;
try {
fos = new FileOutputStream("d:/aaa.png");
ChartUtilities.writeChartAsPNG(fos,chart,640,390);
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("ok!!!");
}
}