JFreeChart最新版本1.0.8a的研究系列——生成曲线图

生成曲线图

具体实现步骤

大致和柱状图的生成方式差不多
1)创建用于图形生成所要的数据集对象。
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    DefaultPieDataset类提供的setValue(data,rowKey,columnKey)方法,设置曲线图形显示的数据,其中:rowKey表示X轴数据,columnKey表示Y轴数据,data表示填充曲线图所要的实际数据。另一种方式批量设置,参数与上面对应的数组,DefaultCategoryDataset dataset = (DefaultCategoryDataset)DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);

2)创建图形对象。
    JFreeChart chart = ChartFactory.createLineChart3D("标题", null,null,dataset,PlotOrientation.VERTICAL,,true,false,false);
    createLineChart3D方法是ChartFactory工厂类里的一个方法,用于3D曲线图的生成,平面曲线图使用createLineChart方法创建。八个参数分别代表:图形的标题、X轴标题、Y轴标题、dataset就是CategoryDataset类的实例对象、曲线图显示形式、是否显示图例、测试未明、是否显示鼠标志向提示,其中曲线图显示形式有,PlotOrientation.VERTICAL表示水平方式、PlotOrientation.HORIZONTAL表示垂直方式。

实例应用
package  jfreechar.test;

import  java.awt.Color;
import  java.io.File;
import  java.io.IOException;
import  javax.servlet.http.HttpSession;
import  org.jfree.chart.ChartFactory;
import  org.jfree.chart.ChartFrame;
import  org.jfree.chart.ChartRenderingInfo;
import  org.jfree.chart.ChartUtilities;
import  org.jfree.chart.JFreeChart;
import  org.jfree.chart.axis.NumberAxis;
import  org.jfree.chart.axis.NumberTickUnit;
import  org.jfree.chart.entity.StandardEntityCollection;
import  org.jfree.chart.plot.CategoryPlot;
import  org.jfree.chart.plot.PlotOrientation;
import  org.jfree.chart.renderer.category.LineAndShapeRenderer;
import  org.jfree.chart.servlet.ServletUtilities;
import  org.jfree.data.Range;
import  org.jfree.data.category.DefaultCategoryDataset;
import  org.jfree.data.general.DatasetUtilities;

/**
 * 测试生成曲线(折线)图实例
 * 
 * 
@author 左杰
 * 
 
*/

public   class  LineChartTest  {
    
/**
     * 获取简单数据集对象
     * 
     * 
@return
     
*/

    
public DefaultCategoryDataset getJdDataSet() {
        DefaultCategoryDataset dataset 
= new DefaultCategoryDataset();
        dataset.addValue(
100"鸡肉""一月");
        dataset.addValue(
200"鸡肉""二月");
        dataset.addValue(
800"鸡肉""三月");
        dataset.addValue(
400"鸡肉""四月");
        dataset.addValue(
500"鸡肉""五月");
        dataset.addValue(
900"鸡肉""六月");
        
return dataset;
    }


    
/**
     * 获取组合数据集对象
     * 
     * 
@return
     
*/

    
public DefaultCategoryDataset getZhDataSet() {
        DefaultCategoryDataset dataset 
= new DefaultCategoryDataset();
        dataset.addValue(
100"鸡肉""一月");
        dataset.addValue(
300"猪肉""一月");
        dataset.addValue(
900"羊肉""一月");
        dataset.addValue(
600"鸡肉""二月");
        dataset.addValue(
400"猪肉""二月");
        dataset.addValue(
200"羊肉""二月");
        dataset.addValue(
900"鸡肉""三月");
        dataset.addValue(
500"猪肉""三月");
        dataset.addValue(
700"羊肉""三月");
        dataset.addValue(
300"鸡肉""四月");
        dataset.addValue(
200"猪肉""四月");
        dataset.addValue(
600"羊肉""四月");
        dataset.addValue(
100"鸡肉""五月");
        dataset.addValue(
300"猪肉""五月");
        dataset.addValue(
600"羊肉""五月");
        dataset.addValue(
900"鸡肉""六月");
        dataset.addValue(
400"猪肉""六月");
        dataset.addValue(
200"羊肉""六月");
        
return dataset;
    }

    
    
/**
     * 批量设置数据
     * 
@return
     
*/

    
public DefaultCategoryDataset getDataSet(){
        
// 设置填充数据
        double[][] data = new double[][] 13102201110100,520,80 },
                
72017006801640,520,859 }130102098080,821,336 },
                
404003601300,924,105 } }
;
        String[] rowKeys 
= "猪肉""牛肉""鸡肉""鱼肉" };
        String[] columnKeys 
= "一月""二月""三月""四月","五月","六月" };
        DefaultCategoryDataset dataset 
= (DefaultCategoryDataset) DatasetUtilities
                .createCategoryDataset(rowKeys, columnKeys, data);
        
return dataset;
    }

    
    
/**
     * 创建图表主对象JFreechart,并设置图像显示
     * 
@return
     
*/

    
public JFreeChart createLineChart() {
        
        DefaultCategoryDataset dataset 
=getDataSet();
        
// 创建JFreechart对象,3D状的
        
//JFreeChart chart = ChartFactory.createLineChart3D("江苏省上半年肉类销量统计图", "江苏省",
        
//        "销量", dataset, PlotOrientation.VERTICAL, true, true, false);
        
// 创建JFreechart对象,3D状的
        JFreeChart chart = ChartFactory.createLineChart("江苏省上半年肉类销量统计图""江苏省",
                
"销量", dataset, PlotOrientation.VERTICAL, truetruefalse);
        
// 数据区设置
        CategoryPlot plot = chart.getCategoryPlot();
        plot.setBackgroundPaint(Color.white); 
// 数据区背景色

        
// X、Y轴属性设置
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        
// 数据轴的数据标签(可以只显示整数标签,需要将AutoTickUnitSelection设false)
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); 
        
// 是否显示零点
        rangeAxis.setAutoRangeIncludesZero(true); 
        
// 数据轴上(右)边距
        rangeAxis.setUpperMargin(0.02); 
        
// Y轴名称的倾斜角度
        rangeAxis.setLabelAngle(0.3); 
        
// 设置数据轴的数据范围
        rangeAxis.setRange(new Range(02000));
        
// 设置刻度波动值
        rangeAxis.setTickUnit(new NumberTickUnit(100));
        
// 数据线设置
        LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot
                .getRenderer();
        
//设置每个曲线的颜色
        renderer.setSeriesPaint(0, Color.pink);
        renderer.setSeriesPaint(
1new Color(0100255));
        renderer.setSeriesPaint(
2, Color.green);
        renderer.setSeriesPaint(
3new Color(24,68,100));
        
return chart;
    }

    
    
/**
     * 生成图形,保存图像到临时文件,并返回文件名
     * 
     * 
@param chart
     *            JFreeChart对象实例
     * 
@param w
     *            图像宽度
     * 
@param h
     *            图像高度
     * 
@param session           
     *            会话session
     * 
@return
     
*/

    
public String getFileName(JFreeChart chart, int w, int h,HttpSession session) {
        
// 生成图形,保存图像到临时文件,并返回文件名
        String fileName = "";
        StandardEntityCollection sec 
= new StandardEntityCollection();
        ChartRenderingInfo info 
= new ChartRenderingInfo(sec);
        
try {
            fileName 
= ServletUtilities.saveChartAsPNG(chart, w, h, info, session);
        }
 catch (Exception e) {
            System.out.println(
"Exception - " + e.toString());
            fileName 
= "public_error_500x300.png";
        }

        
return fileName;
    }


    
/**
     * 生成图形,保存到指定文件,文件类型为png
     * 
     * 
@param fileName
     *            指定保存文件的路径及文件名
     * 
@param chart
     *            JFreeChart对象实例
     * 
@param w
     *            图像宽度
     * 
@param h
     *            图像高度
     
*/

    
public void SaveFileAsPNG(String fileName, JFreeChart chart, int w, int h) {
        
// 生成图形,保存到指定文件,文件类型为png
        try {
            ChartUtilities.saveChartAsPNG(
new File(fileName), chart, w, h);
        }
 catch (IOException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


    
/**
     * 生成图形,保存到指定文件,文件类型为jpg
     * 
     * 
@param fileName
     *            指定保存文件的路径及文件名
     * 
@param chart
     *            JFreeChart对象实例
     * 
@param w
     *            图像宽度
     * 
@param h
     *            图像高度
     
*/

    
public void SaveFileAsJPEG(String fileName, JFreeChart chart, int w, int h) {
        
// 生成图形,保存到指定文件,文件类型为jpg
        try {
            ChartUtilities.saveChartAsPNG(
new File(fileName), chart, w, h);
        }
 catch (IOException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    
public static void main(String[] args) {
        LineChartTest p 
= new LineChartTest();
        JFreeChart chart 
= p.createLineChart();
        
// 保存为图像文件
        p.SaveFileAsPNG("d://linechart.png", chart, 800600);
        
// 显示在GUI上
        ChartFrame frame = new ChartFrame("江苏省上半年肉类销量统计图", chart);
        frame.pack();
        frame.setVisible(
true);
    }

}
这个执行后显示的是平面曲线图,如果想实现3D曲线图,只需要在创建JFreeChart对象时使用ChartFactory.createLineChart3D方法。
运行结果如下:
平面曲线图 3D曲线图
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值