JFreeChart:在XYLineChart的轴上添加自定义字符串刻度

时间:2012-08-02 13:48:42

标签: java swing jfreechart

我的应用使用JFreeChart生成了大量的XYLineCharts(> 180k数据点)。

每个数据点都有一个序列号(从1到185000),用于X轴刻度值(整数值,带自动量程):

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


到目前为止它的效果很好。现在难以添加带有自定义值的X轴刻度,因为我想为显示的第一个和最后一个数据点添加X轴标签(我想显示第一个和最后一个数据点生产日期 - 它们是已按时间顺序排序。)

我花了几个小时搜索:似乎JFreeChart肯定不支持它。我也没有找到任何黑客(例如注释只能放在图上)。

如何解决这个问题的任何指针/想法都将非常感激!

托马斯

PS:图表可以放大/缩小,因此自定义刻度需要相应更新。

PS2:使用类别轴似乎不是解决方案,因为它不会自动更改刻度范围(我认为)

1 个答案:

答案 0 :(得分: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;
    }
});

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