首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

jFreeChart学习札记

2012-06-26 
jFreeChart学习笔记一? JFreeChart生成饼状图实现的思路 1、初始化图表数据2、获得图表数据集DefaultPieData

jFreeChart学习笔记

一? JFreeChart生成饼状图

实现的思路

1、初始化图表数据
2、获得图表数据集DefaultPieDataset
3、利用chart工厂创建一个jfreechart实例
?? JFreeChart chart = ChartFactory.createPieChart3D(title, // 图表标题
??????? dataset, // 图表数据集
??????? true, // 是否显示图例
??????? false, // 是否生成工具(提示)
??????? false // 是否生成URL链接
??????? );
4、通过TextTitle类设置饼图的标题与字体:
????? void setFont(Font font)标题字体
????? void setPaint(Paint paint)标题字体颜色
????? void setText(String title)标题内容
5、通过LegendTitle类设置图例的字体:
????? void setItemFont(Font font)标题字体
6、获得饼图实例PiePlot,设置饼图参数:
????? void setLabelFont(Font font)标签字体
????? void setForegroundAlpha(float alpha)指定图片的透明度(0.0-1.0)
????? void setLabelGenerator(PieSectionLabelGenerator generator)分类标签的格式,设置成null则整个标签包括连接结都不显示
????? void setStartAngle(double angle)饼图的初始角度
源代码


import java.awt.Color;
import java.awt.Font;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
public class CreatePieChart {
??? /**
??? * 获得数据集。
??? * @return org.jfree.data.general.DefaultPieDataset
??? */
??? private static DefaultPieDataset getDataSet() {
??????? DefaultPieDataset dfp = new DefaultPieDataset();
??????? dfp.setValue("研发人员", 35);
??????? dfp.setValue("市场策划人员", 10);
??????? dfp.setValue("市场推广人员", 25);
??????? dfp.setValue("网络维护人员", 5);
??????? dfp.setValue("财务人员", 15);
??????? return dfp;
??? }
??? /**
???? * 生成饼状图。
???? */
??? public static void makePieChart3D() {
??????? String title = "饼状图";
??????? // 获得数据集
??????? DefaultPieDataset dataset = getDataSet();
??????? // 利用chart工厂创建一个jfreechart实例
??????? JFreeChart chart = ChartFactory.createPieChart3D(title,?? // 图表标题
??????????????? dataset,?? // 图表数据集
??????????????? true,????? // 是否显示图例
??????????????? false,???? // 是否生成工具(提示)
??????????????? false????? // 是否生成URL链接
??????????????? );
??????? // 设置pieChart的标题与字体
??????? Font font = new Font("宋体", Font.BOLD, 25);
??????? TextTitle textTitle = new TextTitle(title);
??????? textTitle.setFont(font);
??????? chart.setTitle(textTitle);
??????? chart.setTextAntiAlias(false);
??????? // 设置背景色
??????? chart.setBackgroundPaint(new Color(255, 255, 255));
??????? // 设置图例字体
??????? LegendTitle legend = chart.getLegend(0);
??????? legend.setItemFont(new Font("宋体", 1, 15));
??????? // 设置标签字体
??????? PiePlot plot = (PiePlot) chart.getPlot();
??????? plot.setLabelFont(new Font("宋体", Font.TRUETYPE_FONT, 12));
??????? // 指定图片的透明度(0.0-1.0)
??????? plot.setForegroundAlpha(0.95f);
??????? // 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
??????? plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
??????????????? "{0}={1}({2})", NumberFormat.getNumberInstance(),
??????????????? new DecimalFormat("0.00%")));
??????? // 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
??????? plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({2})"));
??????? // 设置第一个饼块截面开始的位置,默认是12点钟方向
??????? plot.setStartAngle(90);
??????? /***********************************************************/
??????? ChartFrame frame = new ChartFrame(title, chart, true);
??????? frame.pack();
??????? frame.setVisible(true);
??? }
??? /**
???? * @param args
???? */
??? public static void main(String[] args) {
??????? // 3D饼状图
??????? makePieChart3D();
??? }
}
?
?
?
二? JFreeChart生成柱状图
实现的思路
1、初始化图表数据
2、获得图表数据集CategoryDataset
3、利用chart工厂创建一个jfreechart实例
?? JFreeChart chart = ChartFactory.createBarChart3D(title, // 图表标题
??????? "X轴",???????????????????? // X轴的显示标签
??????? "Y轴",???????????????????? // Y轴的显示标签
??????? dataset,?????????????????? // 数据集
??????? PlotOrientation.VERTICAL,? // 图表方向:水平、垂直
??????? true,????????????????????? // 是否显示图例
??????? true,????????????????????? // 是否生成工具(提示)
??????? true?????????????????????? // 是否生成URL链接
??????? );
4、通过TextTitle类设置饼图的标题与字体:
????? void setFont(Font font)标题字体
????? void setPaint(Paint paint)标题字体颜色
????? void setText(String title)标题内容
5、获得柱状图实例CategoryPlot:
????? CategoryPlot plot = chart.getCategoryPlot();
6、获得横轴(CategoryAxis)并设置格式
????? CategoryAxis categoryAxis = plot.getDomainAxis();
????? void setLabelFont(Font font)横轴标签字体
????? void setTickLabelFont(Font font)横轴标记字体
7、获得纵轴(NumberAxis)并设置格式
????? NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
????? void setLabelFont(Font font)纵轴标签字体
源代码

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;
public class CreateBarChart {
??? /**
???? * 获得数据集。
???? * @return org.jfree.data.category.CategoryDataset
???? */
??? private static CategoryDataset getDataset() {
??????? double[][] data = new double[][] { { 751, 800, 260, 600, 200 },
??????????? { 400, 560, 240, 300, 150 }, { 600, 450, 620, 220, 610 } };
??????? String[] rowKeys = { "CPU", "硬盘", "内存" };
??????? String[] columnKeys = { "北京", "上海", "广州", "南京", "深圳" };
??????? CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
??????????? rowKeys, columnKeys, data);
??????? return dataset;
??? }
??? /**
???? * 生成柱状图。
???? */
??? public static void makeBarChart3D() {
??????? String title = "电脑配件三月销量";
??????? // 获得数据集
??????? CategoryDataset dataset = getDataset();
??????? JFreeChart chart = ChartFactory.createBarChart3D(title, // 图表标题
??????????? "配件",????????????????????? // 目录轴的显示标签
??????????? "销量",????????????????????? // 数值轴的显示标签
??????????? dataset,???????????????????? // 数据集
??????????? PlotOrientation.VERTICAL,??? // 图表方向:水平、垂直
??????????? true,??????????????????????? // 是否显示图例
??????????? true,??????????????????????? // 是否生成工具(提示)
??????????? true???????????????????????? // 是否生成URL链接
??????? );
??????? // 设置标题字体
??????? Font font = new Font("宋体", Font.BOLD, 18);
??????? TextTitle textTitle = new TextTitle(title);
??????? textTitle.setFont(font);
??????? chart.setTitle(textTitle);
??????? chart.setTextAntiAlias(false);
??????? // 设置背景色
??????? chart.setBackgroundPaint(new Color(255, 255, 255));
??????? // 设置图例字体
??????? LegendTitle legend = chart.getLegend(0);
??????? legend.setItemFont(new Font("宋体", Font.TRUETYPE_FONT, 14));
??????? // 获得柱状图的Plot对象
??????? CategoryPlot plot = chart.getCategoryPlot();
??????? // 取得横轴
??????? CategoryAxis categoryAxis = plot.getDomainAxis();
??????? // 设置横轴显示标签的字体
??????? categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 16));
??????? // 设置横轴标记的字体
??????? categoryAxis.setTickLabelFont(new Font("宋休", Font.TRUETYPE_FONT, 16));
??????? // 取得纵轴
??????? NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
??????? // 设置纵轴显示标签的字体
??????? numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 16));
??????? /**************************************************************/
??????? ChartFrame frame = new ChartFrame(title, chart, true);
??????? frame.pack();
??????? frame.setVisible(true);
??? }
??? /**
???? * @param args
???? */
??? public static void main(String[] args) {
??????? // 3D柱状图
??????? makeBarChart3D();
??? }
}
?
?
?
三 JFreeChart生成折线图
实现的思路
1、初始化图表数据
2、获得图表数据集CategoryDataset
3、利用chart工厂创建一个jfreechart实例
?? JFreeChart chart = ChartFactory.createLineChart(title, // 图表标题
??????? "X轴",???????????????????? // X轴的显示标签
??????? "Y轴",???????????????????? // Y轴的显示标签
??????? dataset,?????????????????? // 数据集
??????? PlotOrientation.VERTICAL,? // 图表方向:水平、垂直
??????? true,????????????????????? // 是否显示图例
??????? true,????????????????????? // 是否生成工具(提示)
??????? false????????????????????? // 是否生成URL链接
??????? );
4、通过TextTitle类设置饼图的标题与字体:
????? void setFont(Font font)标题字体
????? void setPaint(Paint paint)标题字体颜色
????? void setText(String title)标题内容
5、获得折线图实例CategoryPlot
????? CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
????? void setDomainGridlinesVisible(boolean flag)设置X轴网格是否中见
????? void setRangeGridlinesVisible(boolean flag)设置Y轴网格是否可见
????? void setBackgroundPaint(Color color)设置背景色
6、获得横轴(CategoryAxis)并设置格式
????? CategoryAxis categoryAxis = plot.getDomainAxis();
????? void setLabelFont(Font font)横轴标签字体
????? void setTickLabelFont(Font font)横轴标记字体
7、获得纵轴(NumberAxis)并设置格式
????? NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
????? void setLabelFont(Font font)纵轴标签字体
源代码

importjava.awt.Color;
importjava.awt.Font;
importorg.jfree.chart.ChartFactory;
importorg.jfree.chart.ChartFrame;
importorg.jfree.chart.JFreeChart;
importorg.jfree.chart.axis.CategoryAxis;
importorg.jfree.chart.axis.CategoryLabelPositions;
importorg.jfree.chart.axis.NumberAxis;
importorg.jfree.chart.plot.CategoryPlot;
importorg.jfree.chart.plot.PlotOrientation;
importorg.jfree.chart.renderer.category.LineAndShapeRenderer;
importorg.jfree.chart.title.LegendTitle;
importorg.jfree.chart.title.TextTitle;
importorg.jfree.data.category.CategoryDataset;
importorg.jfree.data.general.DatasetUtilities;
public class CreateLineChart {
??? /**
???? * 获得数据集。
???? * @return org.jfree.data.category.CategoryDataset
???? */
??? private static CategoryDataset getDataset() {
??????? double[][] data = new double[][] { { 751, 800, 260, 600, 200 },
??????????????? { 400, 560, 240, 300, 150 }, { 600, 450, 620, 220, 610 } };
??????? String[] rowKeys = { "CPU", "硬盘", "内存" };
??????? String[] columnKeys = { "北京", "上海", "广州", "南京", "深圳" };
??????? CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
??????????????? rowKeys, columnKeys, data);
??????? return dataset;
??? }
??? /**
???? * 生成折线图。
???? */
??? public static void makeLineChart() {
??????? String title = "电脑配件三月销量";
??????? // 获得数据集
??????? CategoryDataset dataset = getDataset();
??????? JFreeChart chart = ChartFactory.createLineChart(title, // 图表标题
??????????????? "配件",??????????????????? // 目录轴的显示标签
??????????????? "销量",??????????????????? // 数值轴的显示标签
??????????????? dataset,?????????????????? // 数据集
??????????????? PlotOrientation.VERTICAL,? // 图表方向:水平、垂直
??????????????? true,????????????????????? // 是否显示图例
??????????????? true,????????????????????? // 是否生成工具(提示)
??????????????? false????????????????????? // 是否生成URL链接
??????????????? );
??????? chart.setTextAntiAlias(false);
??????? // 设置背景色
??????? chart.setBackgroundPaint(Color.WHITE);
??????? // 设置图标题的字体
??????? Font font = new Font("宋体", Font.BOLD, 20);
??????? TextTitle textTitle = new TextTitle(title);
??????? textTitle.setFont(font);
??????? chart.setTitle(textTitle);
??????? // 设置X轴Y轴的字体
??????? Font labelFont = new Font("宋体", Font.BOLD, 16);
??????? chart.setBackgroundPaint(Color.WHITE);
??????? // 设置图例字体
??????? LegendTitle legend = chart.getLegend(0);
??????? legend.setItemFont(new Font("宋体", Font.TRUETYPE_FONT, 14));
??????? // 获得plot
??????? CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
??????? // x轴 分类轴网格是否可见
??????? categoryplot.setDomainGridlinesVisible(true);
??????? // y轴 数据轴网格是否可见
??????? categoryplot.setRangeGridlinesVisible(true);
??????? // 虚线色彩
??????? categoryplot.setRangeGridlinePaint(Color.WHITE);
??????? // 虚线色彩
??????? categoryplot.setDomainGridlinePaint(Color.WHITE);
??????? // 设置背景色
??????? categoryplot.setBackgroundPaint(Color.lightGray);
??????? // 设置轴和面板之间的距离
??????? CategoryAxis domainAxis = categoryplot.getDomainAxis();
??????? // 设置横轴标签标题字体
??????? domainAxis.setLabelFont(labelFont);
??????? // 设置横轴数值标签字体
??????? domainAxis.setTickLabelFont(new Font("宋体", Font.TRUETYPE_FONT, 14));
??????? // 横轴上的
??????? domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);
??????? // 设置距离图片左端距离
??????? domainAxis.setLowerMargin(0.0);
??????? // 设置距离图片右端距离
??????? domainAxis.setUpperMargin(0.0);
??????? NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
??????? // 设置纵轴显示标签的字体
??????? numberaxis.setLabelFont(labelFont);
??????? numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
??????? numberaxis.setAutoRangeIncludesZero(true);
??????? // 获得renderer
??????? LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot
??????????????? .getRenderer();
??????? // series 点(即数据点)可见
??????? lineandshaperenderer.setBaseShapesVisible(true);
??????? // series 点(即数据点)间有连线可见
??????? lineandshaperenderer.setBaseLinesVisible(true);
??????? /*******************************************************/
??????? ChartFrame frame = new ChartFrame(title, chart, true);
??????? frame.pack();
??????? frame.setVisible(true);
??? }
??? /**
???? * @param args
???? */
??? public static void main(String[] args) {
??????? // 曲线图
??????? makeLineChart();
??? }
}
?
?四 JFreeChart生成时序图
实现的思路
1、实例化TimeSeries对象
?? TimeSeries timeseries = new TimeSeries("Data");
2、创建TimeSeriesCollection集合对象
?? TimeSeriesCollection dataset = new TimeSeriesCollection(timeseries);
3、利用chart工厂创建一个jfreechart实例
?? JFreeChart chart = ChartFactory.createBarChart3D(title, // 图表标题
??????? "X轴",???????????????????? // X轴的显示标签
??????? "Y轴",???????????????????? // Y轴的显示标签
??????? dataset,?????????????????? // 数据集
??????? true,????????????????????? // 是否显示图例
??????? true,????????????????????? // 是否生成工具(提示)
??????? true?????????????????????? // 是否生成URL链接
??????? );
4、通过TextTitle类设置饼图的标题与字体:
????? void setFont(Font font)标题字体
????? void setPaint(Paint paint)标题字体颜色
????? void setText(String title)标题内容
5、通过LegendTitle类设置图例的字体:
????? void setItemFont(Font font)标题字体
6、获得时序图实例XYPlot:
????? XYPlot plot = chart.getXYPlot();
7、获取X轴对象
????? DateAxis axis = (DateAxis) plot.getDomainAxis();
????? void setDateFormatOverride(DateFormat formatter)设置日期显示格式
????? void setLabelFont(Font font)设置X轴标签字体
8、获取Y轴对象
????? NumberAxis numAxis = (NumberAxis) plot.getRangeAxis();
????? void setLabelFont(Font font)设置Y轴标签字体
源代码

import java.awt.Color;
import java.awt.Font;
import java.text.SimpleDateFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
public class CreateTimeSeriesChart {
??? public static void makeTimeSeriesChart() {
??????? // 实例化TimeSeries对象
??????? TimeSeries timeseries = new TimeSeries("Data");
??????? // 实例化Day
??????? Day day = new Day(1,1,2009);
??????? double d = 3000D;
??????? // 添加一年365天的数据
??????? for(int i = 0 ; i < 365 ; i++){
??????????? // 创建随机数据
??????????? d = d+(Math.random() - 0.5) * 10;
??????????? // 向数据集合中添加数据
??????????? timeseries.add(day,d);
??????????? day = (Day)day.next();
??????? }
??????? // 创建TimeSeriesCollection集合对象
??????? TimeSeriesCollection dataset = new TimeSeriesCollection(timeseries);
??????? // 生成时序图
??????? JFreeChart chart = ChartFactory.createTimeSeriesChart("上证指数时序图",//标题
?????????????? "日期",??? //时间轴标签
?????????????? "指数",??? //数据轴标签
?????????????? dataset,?? //数据集合
?????????????? true,????? //是否显示图例标识
?????????????? true,????? //是否显示tooltips
?????????????? false);??? //是否支持超链接
??????? String title = "上证指数时序图";
??????? // 设置图例字体
??????? LegendTitle legend = chart.getLegend(0);
??????? legend.setItemFont(new Font("宋体", Font.TRUETYPE_FONT, 15));
??????? // 设置标题字体
??????? Font font = new Font("宋体", Font.BOLD, 20);
??????? TextTitle textTitle = new TextTitle(title);
??????? textTitle.setFont(font);
??????? chart.setTitle(textTitle);
??????? // Plot 对象的获取操作
??????? XYPlot plot = chart.getXYPlot();
??????? // X 轴对象的获取操作
??????? DateAxis axis = (DateAxis) plot.getDomainAxis();
??????? // 设置日期显示格式
??????? axis.setDateFormatOverride(new SimpleDateFormat("MM-dd-yyyy"));
??????? // 设置X轴标签字体
??????? axis.setLabelFont(new Font("宋体", Font.BOLD, 14));
??????? // Y 轴对象的获取操作
??????? NumberAxis numAxis = (NumberAxis) plot.getRangeAxis();
??????? // 设置Y轴标签字体
??????? numAxis.setLabelFont(new Font("宋体", Font.BOLD, 14));
??????? /***************************************************************/
??????? ChartFrame cf = new ChartFrame("时序图", chart);
??????? cf.pack();
??????? cf.setVisible(true);
??? }
??? /**
???? * @param args
???? */
??? public static void main(String[] args) {
??????? // 时序图
??????? makeTimeSeriesChart();
??? }
}
?

热点排行