JFreeChart TimeSeries Axis在非军事时间

时间:2016-07-12 14:21:12

标签: java time-series jfreechart renjin

我正在尝试使用TimeSeries在Java中绘制JFreeChart数据,但数据包含的双精度数是Renjin调用的输出。将数据添加到TimeSeries的代码如下:

for (int i=0; i<series2Values.length; i++) {
    if (!Double.isNaN(series2Values[i])) {
        series2.add(new Hour((int)times[i], new Day()), series2Values[i]);
    } else {
        series2.add(new Hour((int)times[i], new Day()), null);
    }
}

final TimeSeriesCollection dataset2 = new TimeSeriesCollection();
dataset2.addSeries(series2);

JFreeChart chart2 = ChartFactory.createTimeSeriesChart(title, "Time (Hour)", "Vehicles Parked", dataset2, true, true, false);
ChartFrame frame2 = new ChartFrame(title, chart2, false);
frame2.pack();
frame2.setIconImage(img.getImage());
frame2.setVisible(true);

问题在于,无论何时绘制数据,X轴上的时间都会以24小时的军事时间显示,如果time[]数组包含任何重复值,则抛出以下SeriesException

Exception in thread "AWT-EventQueue-0" org.jfree.data.general.SeriesException: You are attempting to add an observation for the time period [6,12/7/2016] but the series already contains an observation for that time period. Duplicates are not permitted.  Try using the addOrUpdate() method.

Exception建议的addOrUpdate()方法只会提前12小时覆盖第一个数据点而不是新的数据点。我希望以12小时格式显示数据,显示AM和PM。

是否有一种方便的方法可以使用JFreeChart执行此操作,或者更改代码以便我对Renjin的调用返回格式化的内容更方便,而不仅仅是1和1之间的普通整数24? (例如已经格式化的时间字符串)?

Cross-posted here.

1 个答案:

答案 0 :(得分:2)

我不熟悉Renjin,但假设Date值表示自epoch以来的毫秒,

  1. 在轴上使用setDateFormatOverride() SimpleDateFormat,例如

    axis.setDateFormatOverride(new SimpleDateFormat("hh:mm"));
    
  2. TimeSeries&#34;将确保......每个时段最多只出现一次。&#34;如果传入的值被正确转换,这应该没有实际意义。