JFreeChart 非军事时间的时间序列轴



我正在尝试使用 JFreeChart 在 Java 中绘制TimeSeries数据,但是数据由双精度组成,这些双精度是调用 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.

异常建议的addOrUpdate()方法只会提前 12 小时覆盖该时间的第一个数据点,而不是创建一个新数据点。我想改为以 12 小时格式显示数据,并显示 AM 和 PM。

有没有一种方便的方法可以用 JFreeChart 来做到这一点,或者更改代码以便我对 Renjin 的调用返回格式化的东西,而不仅仅是 1 到 24 之间的纯整数会更方便?(例如,已经格式化的时间字符串)?

交叉发布在这里。

我不熟悉Renjin,但假设一个Date值代表自纪元以来的毫秒,

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

    axis.setDateFormatOverride(new SimpleDateFormat("hh:mm"));
    
  2. TimeSeries"将确保...每个时期在系列中最多出现一次。如果正确转换了传入值,这应该变得毫无意义。

最新更新