2012-08-02 138 views
2

我的應用正在使用JFreeChart生成沉重的XYLineCharts(> 180k數據點)。JFreeChart:在XYLineChart的軸上添加自定義字符串刻度

每個數據點具有一序號(從1到185000),其用於在X軸蜱值(整數值,具有自動範圍):

plot.getDomainAxis().setStandardTickUnits(NumberAxis.createIntegerTickUnits()); 


到目前爲止它很好。現在很難添加具有自定義值的X軸刻度,因爲我想爲顯示的第一個和最後一個數據點添加X軸標籤(我想顯示第一個和最後一個數據點生產日期 - 它們是已按時間順序排序)。

我花了幾個小時搜索:它似乎絕對不支持JFreeChart。我也沒有發現任何破解(例如註釋只能放在圖上)。

任何關於如何解決這個問題的指針/想法將不勝感激!

托馬斯

PS:圖表可以放大/縮小,因此自定義蜱需要被相應地更新。

PS2:使用類別軸似乎並沒有成爲一個解決方案,因爲它不會自動改變蜱範圍(我認爲)

回答

2

你可以考慮使用NumberFormatOverride

Calendar startDate = Calendar.getInstance(); 
final String firstDataPointProductionDate = startDate.getTime().toString(); 
startDate.add(Calendar.DATE, 10); 
final String latDataPointProductionDate = startDate.getTime().toString(); 
axis.setNumberFormatOverride(new NumberFormat(){ 

    @Override 
    public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) { 
     if (number > 0) 
      return new StringBuffer(firstDataPointProductionDate); 
     else if (number < 185000) 
      return new StringBuffer(latDataPointProductionDate); 
     else 
      return new StringBuffer(String.format("%9.0f", number)); 
     } 

    @Override 
    public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) { 
     return new StringBuffer(String.format("%s", number)); 
    } 

    @Override 
    public Number parse(String source, ParsePosition parsePosition) { 
     return null; 
    } 
}); 

你可以根據需要格式化日期。