2012-08-02 134 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; 
    } 
}); 

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