JfreeChart使用經驗總結(分析了使用中碰到的一些常見問題)

jfreechart使用經驗總結(針對版本:jfreechart-1.0.0-pre2.zip) java

問題一:在每次生成jfreechar圖片的時候都會拋出異常,異常指出問題出在ChartFactory.createXYLineChart(picName, "時間軸", "數據", xydataset,true, true, false)這行代碼上(或create其餘類型的chart) tomcat

分析:因爲jfreechart用到的畫圖庫是Java AWT,因此須要確保JVM運行在headless模式下。若是在Unix系統中使用jfreechar,須要在tomcat的bin目錄下catalina.sh文件中run和start兩處添加-Djava.awt.headless=true / less


問題二:在Unix系統下生成的jfreechart圖片中的中文出現亂碼 ide

分析:亂碼有兩種狀況:
      一種是中文顯示爲問號(?),這種狀況通常是因爲漢字編碼轉換出錯。須要對Unix系統中當前用戶的.cshrc文件中setenv LC_CTYPE iso_8859_1修改成setenv LC_CTYPE zh便可。
      一種是中文顯示爲方框(□),這種狀況通常是因爲jfreechart中用到的字體在當前Unix系統中不存在。jfreechart包中所用到的全部字體以下:
new Font("SansSerif", 1, 12)
new Font("foo", 1, 9)
new Font("Arial", 0, 10)
new Font("Dialog", 0, 12)
new Font("Bitstream Vera Sans", 0, 11)
其中new Font("Bitstream Vera Sans", 0, 11)字體用於對各顏色線條的註釋信息,Unix系統中通常不存在這種字體,須要安裝該字體或者修改package org.jfree.chart.block中LabelBlock文件的構造函數中所出現的這種字體。 函數


問題三:jfreechart生成的圖片時間軸中時間的顯示格式問題 字體

分析:在生成兩組或者多組數據的chart時,分爲如下兩種狀況:
      一種是X和Y軸數據都僅僅只是數據,則能夠直接使用ChartFactory.createXYLineChart(picName, "X軸數據", "Y軸數據", xydataset,true, true, false),xydataset是經過XYSeriesCollection收集XYSeries獲取的數據生成:
XYSeries[] xyseries=new XYSeries[count];
for(int i = 0; i < count; i ++){
 xyseries[i] = new XYSeries(name[i]);
}
xyseries[1].add(double arg0,double arg1);
xyseries[2].add(double arg0,double arg1);
兩組數據都必須以雙精度格式傳入,在chart圖中的X和Y軸數據也都會以雙精度格式顯示。
      一種是X軸數據是時間,Y軸數據爲與這個時間對應的一個有必定精確度的數據,這種狀況就得使用ChartFactory.createTimeSeriesChart(picName, "時間軸", "數據", xydataset,true, true, false),xydataset是經過TimeSeriesCollection收集TimeSeries獲取的數據生成:
TimeSeries timeseries[] = new TimeSeries[count];
for(int i = 0; i < count; i ++){
 timeseries[i] = new TimeSeries(name[i],Minute.class);
}
timeseries[0].addOrUpdate(new Minute(minute,hour,date,month,year), double arg1);
timeseries[1].addOrUpdate(new Minute(minute,hour,date,month,year), double arg1);
(注:這裏使用addOrUpdate而不使用add是有緣由的,若是使用add的話,送入一次數據,生成一個chart圖片,當下一次其餘某個地方再調用這個方法生成chart圖片的時候,就會報出數據衝突的異常信息,估計是上次送入的數據沒有清除掉,因此爲了防止這種狀況通常都使用addOrUpdate)
兩組數據是以(時間,雙精度數據)成對送入的,X軸將會是一個時間軸,並且會以通用的時間格式進行顯示,顯示的時間格式能夠在代碼中定製,詳細代碼以下:
DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis();
dateaxis.setDateFormatOverride(new SimpleDateFormat("時間格式"));
還有一個地方須要說明一下,時間軸上顯示的時間精度能夠根據本身的須要選擇設定,最大能夠精確到年,最小能夠精確到毫秒,設置的位置在timeseries[i] = new TimeSeries(name[i],Minute.class)代碼中,目前精確度設置爲分(Minute.class),全部可選精確度以下:Year.class Month.class Week.class Day.class Hour.class Minute.class Seconds.class Millisecond.class,而後在timeseries[0].addOrUpdate(new Minute(minute,hour,date,month,year), double arg1)代碼中也作相應調整便可。 編碼

相關文章
相關標籤/搜索