Java畫折線圖
阿新 • • 發佈:2017-12-08
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畫折線圖