【问题标题】:JFreeChart: add custom string ticks on XYLineChart's axisJFreeChart:在 XYLineChart 的轴上添加自定义字符串刻度
【发布时间】:2012-08-02 13:48:42
【问题描述】:

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

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

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


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

我花了几个小时搜索:似乎 JFreeChart 绝对不支持它。我也没有找到任何破解方法(例如,注释只能放在情节上)。

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

托马斯

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

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

【问题讨论】:

    标签: java swing jfreechart


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-26
      • 2012-12-12
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      相关资源
      最近更新 更多