JFreeChart 是开放源代码站点SourceForge.net 上的一个 JAVA 项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图 ( 普通柱状图以及堆栈柱状图 )、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

    应用jfreechart来画图需要两个jar包:jfreechart.jar和jcommon.jar,直接去官网下载就成:

https://sourceforge.net/projects/jfreechart/files/

   下载完成后解压,然后将jfreechart.jar和jcommon.jar两个包导入到需要画表的项目中,导入的方法:

右击项目所在的包,选中Build Path,然后选择  Configure Build Path,点击Libraries,再点击Add External JARS,将上述两个包添加进去就可以用啦

Java画折线图_第1张图片


最近在写排序算法,忽然想对比一下各种排序算法的实际运行时间,所以画个图表可以更加直观的进行比较。


代码实现画折线图

class chart{ 
        // 步骤1:创建CategoryDataset对象(准备数据) 
    CategoryDataset dataset = createDataset();  
    CategoryDataset dataset1 = createDataset1();
    // 步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置  
    JFreeChart freeChart = createChart(dataset); 
    JFreeChart freeChart1 = createChart1(dataset1); 
    
    
    //根据CategoryDataset创建JFreeChart对象
    public static JFreeChart createChart(CategoryDataset categoryDateset){
        
        // 创建JFreeChart对象:ChartFactory.createLineChart  
        JFreeChart jfreechart = ChartFactory.createLineChart("The Confrontation Of Sorts In Best Case", // 标题
                "Sort By",         //categoryAxisLabel (category轴,横轴,X轴标签)
                "Spent Time",      // valueAxisLabel(value轴,纵轴,Y轴的标签)
                categoryDateset,  //Dataset  
                PlotOrientation.VERTICAL, false, // legend 
                false,          //Tooltips
                false);        //URLs
        
        // 使用CategoryPlot设置各种参数。  
        CategoryPlot plot = (CategoryPlot)jfreechart.getPlot();  
        
        // 背景色 透明度  
        plot.setBackgroundAlpha(0.5f);  
        
        // 前景色 透明度  
        plot.setForegroundAlpha(1.0f);  
        
        // 其他设置 参考 CategoryPlot类  
        LineAndShapeRenderer renderer = (LineAndShapeRenderer)plot.getRenderer();  
        renderer.setBaseShapesVisible(true); // series 点(即数据点)可见  
        renderer.setBaseLinesVisible(true); // series 点(即数据点)间有连线可见  
        renderer.setUseSeriesOffset(true); // 设置偏移量  
        renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());  
        renderer.setBaseItemLabelsVisible(true);  
        return jfreechart;  
    }
    
    public static CategoryDataset createDataset() {  
        String[] rowKeys = {"Sort"};  
        String[] colKeys = {"HeapSort","ShellSort","BubbleSort","QuickSort","RadixSort","SimpleSort"};  
        
        double[][] data = {{TimeChat.btime_Heap,TimeChat.btime_Shell,TimeChat.btime_Bubble,TimeChat.btime_Quick,TimeChat.btime_Radix,TimeChat.btime_Simple},};   
        //System.out.println(TimeChat.btime_Heap);
        return DatasetUtilities.createCategoryDataset(rowKeys, colKeys, data);  
    }
    
    //最坏情况下
     public static JFreeChart createChart1(CategoryDataset categoryDateset){
        
        // 创建JFreeChart对象:ChartFactory.createLineChart  
        JFreeChart jfreechart = ChartFactory.createLineChart("The Confrontation Of Sorts In Worst Case", // 标题
                "Sort By",           //categoryAxisLabel (category轴,横轴,X轴标签) 
                "Spent Time",       //valueAxisLabel(value轴,纵轴,Y轴的标签)
                categoryDateset,    // Dataset
                PlotOrientation.VERTICAL, false, // legend 
                false,            //Tooltips 
                false);          // URLs 
        
 
        CategoryPlot plot = (CategoryPlot)jfreechart.getPlot(); 
        plot.setBackgroundAlpha(0.5f);   
        plot.setForegroundAlpha(0.5f);
        LineAndShapeRenderer renderer = (LineAndShapeRenderer)plot.getRenderer(); 
        renderer.setBaseShapesVisible(true); // series 点(即数据点)可见 
        renderer.setBaseLinesVisible(true); // series 点(即数据点)间有连线可见 
        renderer.setUseSeriesOffset(true); // 设置偏移量 
        renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); 
        renderer.setBaseItemLabelsVisible(true); 
        return jfreechart; 
     }
     
     public static CategoryDataset createDataset1() { 
        String[] rowKeys = {"Sort"}; 
        String[] colKeys = {"HeapSort","ShellSort","BubbleSort","QuickSort","RadixSort","SimpleSort"}; 
       
        double[][] data = {{TimeChat.wtime_Heap,TimeChat.wtime_Shell,TimeChat.wtime_Bubble,TimeChat.wtime_Quick,TimeChat.wtime_Radix,TimeChat.wtime_Simple},};  
        //System.out.println(TimeChat.btime_Heap);
        return DatasetUtilities.createCategoryDataset(rowKeys, colKeys, data); 
    }
     
}

将图表建好之后需要借助ChartPanel类将其显示出来,或者可以将生成的图表以图片格式保存到本地,我选择将它直接显示出来:

public class TimeChart{
     public static void main(String[] strings){
          TimeChat tc = new TimeChat(); //另一个类,初始化data[][]中的变量
          chart ct = new chart();
          ChartPanel chartf = new ChartPanel(ct.freeChart,true);
          ChartPanel chartf1 = new ChartPanel(ct.freeChart1,true);
          JFrame jf = new JFrame();
          jf.add(chartf,BorderLayout.WEST);
          jf.add(chartf1,BorderLayout.EAST);
          jf.setVisible(true);
          jf.setSize(1400, 600);
          jf.setLocationRelativeTo(null);
     }
}

运行效果如下

Java画折线图_第2张图片