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

标签 java swing jfreechart

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

每个数据点都有一个连续的数字(从 1 到 185000),用于 X 轴刻度值(整数值,具有自动范围):

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


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

我花了几个小时搜索:看来JFreeChart肯定不支持。我也没有找到任何破解方法(例如注释只能放在绘图上)。

任何有关如何解决此问题的指针/想法将不胜感激!

托马斯

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

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

最佳答案

您可以考虑使用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;
    }
});

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

关于java - JFreeChart:在 XYLineChart 轴上添加自定义字符串刻度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11778836/

相关文章:

java - Java 中的接口(interface)数组

java - WindowListener 未按预期工作

java - 如何在禁用自动计算的情况下在 ValueAxis 上设置边距?

java - 如何使用 CP1250 编码将自定义字体添加到 JFreeChart

java - volatile 数组和多线程排序

java - J2EE应用程序如何实现异步处理

java - 如何实现从一个 JTree 到另一个 JTree 的智能拖放?

java - 通过 ActionListener 重绘未执行

java - 将 BufferedImage 添加到 PDFBox 2.0 文档

java - 在静态方法中使用 @Autowired HttpServletRequest 请求对象