1. 程式人生 > >Java畫折線圖

Java畫折線圖

java 折線圖 jfreechart

??? 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,將上述兩個包添加進去就可以用啦

技術分享圖片技術分享圖片


最近在寫排序算法,忽然想對比一下各種排序算法的實際運行時間,所以畫個圖表可以更加直觀的進行比較。


代碼實現畫折線圖

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畫折線圖