`

使用JFreeChart创建图象

阅读更多
使用JFreeChart创建图象
一:jfreechart介绍
jfreechart是一个免费创建图片的java工具.可以创建如下图形:
饼图(pie charts;)
曲线图(line charts )
柱状图(horizontal/vertical bar charts)
甘特图(Gantt charts; )
XY plots and scatter plots;
time series, high/low/open/close charts and candle stick charts;
combination charts;
Pareto charts;
bubble charts;
wind plots, meter charts and symbol charts;
从以下地址可以看到jfreechart可以创建的图形类型
http://www.jfree.org/jfreechart/samples.html
sourceforge有一个基于jfreechart的项目Cewolf可以很方便的在jsp/servlet中创建图片
jfreechart目前(2003-05-08)版本为0.98
希望得到详细的信息或下载jfreechart请访问如下站点:
http://www.jfree.org/jfreechart/

二:特别说明:
jfreechart是一个开源项目,但是文档是需要40美金去购买的。
还有一个很重要的问题,jfreechart如果使用中文,他使用的默认字体
显示出来的中文会很模糊,你可能需要修改源代码。
下面我就举几个简单的例子说明一下如何使用jfreechart创建图片
在开发中有可能会导入以下的类
import com.jrefinery.chart.ChartFactory;
import com.jrefinery.chart.ChartUtilities;
import com.jrefinery.chart.JFreeChart;
import com.jrefinery.chart.TextTitle;
import com.jrefinery.chart.axis.NumberAxis;
import com.jrefinery.chart.plot.CategoryPlot;
import com.jrefinery.chart.plot.PiePlot;
import com.jrefinery.data.Day;
import com.jrefinery.data.DefaultCategoryDataset;
import com.jrefinery.data.DefaultPieDataset;
import com.jrefinery.data.TimeSeries;
import com.jrefinery.data.TimeSeriesCollection;
import com.jrefinery.data.TimeSeriesDataPair;
在0.98以后包由com.jrefinery.*改变为:org.jfree

三:创建饼图
//图片标题
String title = "空调2002年市场占有率";
//设定数据源
DefaultPieDataset piedata = new DefaultPieDataset();
//第一个参数为名称,第二个参数是double数
piedata.setValue("联想", 27.3);
piedata.setValue("长城", 12.2);
piedata.setValue("海尔", 5.5);
piedata.setValue("美的", 17.1);
piedata.setValue("松下", 9.0);
piedata.setValue("科龙", 19.0);
//创建JFreeChart,都使用ChartFactory来创建JFreeChart,很标准的工厂设计模式
JFreeChart chart =
ChartFactory.createPieChart(title, piedata, true, true, true);
//设定图片标题
chart.setTitle(new TextTitle(title, new Font("隶书", Font.ITALIC, 15)));
//chart.addSubtitle(new TextTitle("2002财年分析", new Font("隶书", Font.ITALIC, 12)));
//设定背景
chart.setBackgroundPaint(Color.white);
//chart.s
//饼图使用一个PiePlot
PiePlot pie = (PiePlot)chart.getPlot();
//pie.setSectionLabelType(PiePlot.NAME_AND_PERCENT_LABELS);
pie.setSectionLabelType(PiePlot.NAME_AND_VALUE_LABELS);
//设定显示格式(名称加百分比或数值)
pie.setPercentFormatString("#,###0.0#%");
//设定百分比显示格式
pie.setBackgroundPaint(Color.white);
pie.setSectionLabelFont(new Font("黑体", Font.TRUETYPE_FONT, 12));
//设定背景透明度(0-1.0之间)
pie.setBackgroundAlpha(0.6f);
//设定前景透明度(0-1.0之间)
pie.setForegroundAlpha(0.90f);
//输出文件到指定目录
String rfname = MathUtil.getRoundCode(12) + ".jpeg";
String fileName = "d:/test/" + rfname;
try {
//可以保存文件为jpg或png格式。
ChartUtilities.saveChartAsJPEG(new File(fileName), 100, chart, 600, 600);
//第一个参数为文件名
//第二个参数质量
//第三个参数为哪个chart创建图片
//第四个宽度
//第五个高度
} catch (IOException exz) {
System.out.print("....Cantt Create image File");
}

其实使用JFreeChart创建图片很简单,不同的的图片类型区别在于设置数据集

四:创建曲线图
// create a default chart based on some sample data...
//曲线图标题
String title = "趋势分析";
//曲线图X轴提示
String domain = "月份走势";
//曲线图Y轴提示
String range = "应收余额";
//曲线图自标题
String subtitleStr = "2003财年分析";
//创建时间数据源
//每一个TimeSeries在图上是一条曲线
TimeSeries ca = new TimeSeries("用友");
for (int i = 1999; i < 2005; i++) {
for (int mon = 0; mon < 12; mon++) {
//ca.add(new Month(mon + 1, i), new Double(500 + Math.random() * 100));
//TimeSeriesDataPair是一个时间点的数值体现
ca.add(
new TimeSeriesDataPair(
new Day(1, mon + 1, i),
new Double(500 + Math.random() * 100)));
}
}

TimeSeries ibm = new TimeSeries("金碟");
for (int i = 1999; i < 2005; i++) {
for (int mon = 0; mon < 12; mon++) {
//ibm.add(new Month(mon+1,i),new Double(400-Math.random()*100));
ibm.add(
new TimeSeriesDataPair(
new Day(1, mon + 1, i),
new Double(400 - Math.random() * 100)));
}
}

TimeSeries king = new TimeSeries("东软");
for (int i = 1999; i < 2005; i++) {
for (int mon = 0; mon < 12; mon++) {
//ibm.add(new Month(mon+1,i),new Double(400-Math.random()*100));
king.add(
new TimeSeriesDataPair(
new Day(1, mon + 1, i),
new Double(300 - Math.random() * 100)));
}
}
//时间曲线数据集合
TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(ca);
dataset.addSeries(ibm);
dataset.addSeries(king);
//dataset.addSeries(jpy);
//dataset.addSeries(mav);
//时间曲线元素
JFreeChart chart =
ChartFactory.createTimeSeriesChart(
title,
domain,
range,
dataset,
true,
true,
false);
// then customise it a little...
TextTitle subtitle =
new TextTitle(subtitleStr, new Font("黑体", Font.BOLD, 12));
chart.addSubtitle(subtitle);
chart.setTitle(new TextTitle(title, new Font("隶书", Font.ITALIC, 15)));
//pie.setSeriesLabelFont(new Font("黑体", Font.BOLD, 15));
chart.setBackgroundPaint(
new GradientPaint(0, 0, Color.white, 0, 1000, Color.blue));
//sysout
//输出文件到指定目录
String rfname = MathUtil.getRoundCode(22) + ".jpeg";
String fileName = "d:/test/" + rfname;
try {
//for
//System.out.println();
ChartUtilities.saveChartAsJPEG(new File(fileName), 100, chart, 600, 600);
// log.info("....Create image File:" + fileName);
} catch (IOException exz) {
System.out.print("....Cantt Create image File");
}


五:创建柱状图
String title = "柱状图测试";
String domain = "单位比较";
String range = "数值";
//CategoryDataset data = DemoDatasetFactory.createCategoryDataset();
DefaultCategoryDataset data = new DefaultCategoryDataset();
for (int r = 0; r < 5; r++) {
String rowKey = "单位 [" + (r + 1)+"]" ;
//第一层循环:分析对象
for (int c = 0; c < 6; c++) {
//第二层循环:分析对象在时间点上的数据
String columnKey = "2001年" + (c + 1) + "月";
data.addValue(new Double(r * c + 5), rowKey, columnKey);
}
}

JFreeChart chart =
ChartFactory.createVerticalBarChart(
title,
domain,
range,
data,
true,
true,
false);
// then customise it a little...
chart.setBackgroundPaint(
new GradientPaint(0, 0, Color.white, 1000, 0, Color.red));
chart.setTitle(new TextTitle(title, new Font("隶书", Font.ITALIC, 15)));
CategoryPlot plot = (CategoryPlot)chart.getPlot();
plot.setForegroundAlpha(0.9f);
plot.setValueLabelFont(new Font("黑体", Font.TRUETYPE_FONT, 12));
//plot.setSectionLabelFont(new Font("黑体", Font.TRUETYPE_FONT, 12));
//注意以下代码
NumberAxis verticalAxis = (NumberAxis)plot.getRangeAxis();
verticalAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
// 输出文件到指定目录
String rfname = MathUtil.getRoundCode(22) + "b.jpeg";
String fileName = "d:/test/" + rfname;
try {
ChartUtilities.saveChartAsJPEG(new File(fileName), 100, chart, 600, 600);
// log.info("....Create image File:" + fileName);
} catch (IOException exz) {
System.out.print("....Cantt Create image File");
}

六:结束语
个人感觉JFreeChart可以满足大部分图片创建的需要,美中不足的是:对字体的设置做的
不够好,特别是使用中文的时候字体很不清晰。因为这个原因建议你自己去修改他的源代码,最好使用properties文件去设置字体.还有就是文档要钱所以要多花点时间去看源代码。或多上社区.因为时间等原因我只介绍了三种图片的创建,其他类型的图片可以参考jfreechart提供的例子。
分享到:
评论

相关推荐

    使用 JFreeChart来创建基于web的图表

    下面我们将详细探讨如何使用JFreeChart创建基于Web的图表。 首先,集成JFreeChart到Web项目中。你需要将JFreeChart的jar文件添加到项目的类路径中,这可以通过在构建路径中包含它或者将其放入WEB-INF/lib目录下完成...

    使用JFreeChart来创建基于web的图表

    ### 如何使用JFreeChart创建Web图表 #### 安装与配置 首先,你需要将JFreeChart库添加到项目中。如果你使用的是Maven,可以通过在`pom.xml`文件中添加依赖来实现: ```xml &lt;groupId&gt;org.jfree &lt;artifactId&gt;...

    在Java Web中使用JFreechart创建图表信息(主要用于统计方面)

    这篇博客文章“在Java Web中使用JFreechart创建图表信息(主要用于统计方面)”将引导我们了解如何在Web应用中集成JFreeChart来处理统计信息。 首先,JFreeChart库提供了丰富的API,可以生成静态图表,这些图表可以...

    使用 JFreeChart来创建基于web的图表_files

    JFreeChart是一款强大的Java库,它允许...综上,"使用 JFreeChart来创建基于web的图表_files"这一主题涵盖了如何利用JFreeChart在Web环境中创建和展示图表的多个方面,包括数据处理、图表定制、图像生成和Web集成等。

    用JFreeChart创建基于Web的图表

    接下来,我们将详细介绍如何使用JFreeChart创建三种类型的图表:饼图、柱状图和线图。 ##### 1. 饼图 饼图通常用于展示数据占比情况,非常适合用来表示市场份额、销售占比等场景。使用JFreeChart创建饼图的基本...

    jfreechart生成图像的包

    你可以创建自定义的实现,或者使用JFreeChart提供的`DefaultCategoryDataset`和`DefaultPieDataset`。 4. **定制图表**:通过`ChartCustomizer`或者直接修改`Chart`对象的属性来定制图表的外观和行为。 5. **绘制...

    jfreechart雷达图

    要使用JFreeChart创建雷达图,首先你需要导入相应的库,并创建一个`CategoryDataset`对象,这个对象将包含你要展示的数据。数据集可以是`DefaultCategoryDataset`,`TableDataset`或其他类型的子类,根据实际需求...

    iText PDF ; JFreeChar

    **使用JFreeChart创建图像** 创建JFreeChart图表分为几个步骤:首先,你需要创建一个数据集(如`CategoryDataset`或`XYDataset`);接着,使用`ChartFactory`创建对应的图表;然后,可以进一步定制图表外观,如添加...

    使用JFreeChart来创建基于web的图表.docx

    【使用JFreeChart创建基于Web的图表】 JFreeChart是一个强大的Java库,它允许开发者创建各种图表,包括饼图、柱状图、线图、区域图、分布图、混合图、甘特图以及仪表盘等。这个开源项目在SourceForge.net上发布,为...

    jfreechart使用的3个jar包

    4. **创建图像输出**:将图表转换为图像输出,例如 PNG 格式: ```java BufferedImage image = chart.createBufferedImage(width, height); // 再将图像写入到文件或流中 ImageIO.write(image, "PNG", new File...

    JFreeChart画雷达图

    首先,让我们了解如何使用JFreeChart来创建基本的雷达图。在JFreeChart中,你需要创建一个`CategoryDataset`来存储你的数据,这个数据集可以包含多个系列(series)和每个系列中的多个类别(categories)。对于雷达...

    使用JFreeChart畫混合圖

    下面是一个简单的Java代码示例,演示了如何使用JFreeChart创建一个混合柱状图和折线图: ```java import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot....

    Freemarker导出word示例,包括jfreechart图表

    在本示例中,我们将使用JFreeChart生成图表,然后将生成的图表嵌入到Freemarker模板生成的Word文档中。 生成图表的过程如下: 1. 创建`CategoryDataset`或`PieDataset`对象,填充必要的数据。 2. 使用这些数据集...

    使用jfreechart显示图片,具体的

    3. **创建图像生成器**:使用`ChartUtilities`类中的静态方法,如`ChartUtilities.writeChartAsPNG()`,将图表转换为PNG或其他图像格式。 4. **输出图像到响应流**:在Struts2中,我们可以创建一个Action,返回一个...

    jfreechart绘制的风速风向玫瑰图

    我们可以使用PolarPlot对象的setAngleTickUnit方法设置角度刻度的单位,使用DefaultPolarItemRenderer对象的setSeriesPaint方法设置折现图像颜色。 使用jfreechart绘制风速风向玫瑰图可以非常方便地实现各种风速...

    使用JFreeChart小结(一)

    在本文中,我们将深入探讨如何使用JFreeChart库在Java应用程序中创建丰富的图表。JFreeChart是一个开源项目,提供了一套全面的API,用于生成多种类型的2D图表,包括线图、柱状图、饼图、散点图、面积图等。在"使用...

    jfreechart依赖jar包

    2. **创建 ChartFactory**:根据需要的图表类型,调用 JFreeChart 的 ChartFactory 类来创建图表实例。 3. **设置数据源**:使用 CategoryDataset 或 TimeSeriesCollection 等数据接口,将数据绑定到图表上。 4. *...

    JFreeChart入门_-_使用JFreeChart开发Pie(饼状图)

    在本教程中,我们将深入探讨如何使用 JFreeChart 创建饼状图(Pie Chart),这是一个常用于展示数据部分比例的可视化工具。 **创建 PieDataset 对象(准备数据)** 在 JFreeChart 中,饼状图的数据由 `PieDataset`...

Global site tag (gtag.js) - Google Analytics