JFreeChart 的一些解释

本文介绍如何使用Java库JFreeChart创建柱状图,并设置了图表的各种样式,包括背景颜色、网格线、数据标签等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下为代码:

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!!!");
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值