时间序列中的相对时间戳

时间:2012-09-27 20:04:18

标签: java jfreechart

我正在尝试制作一个非常简单的图表,用于绘制在一秒钟内测量力的图表。我有简单的例子,它输出如下图:

enter image description here

这是我的代码:

TimeSeries series1 = new TimeSeries("Force", "Domain", "Range");

//generate values
for (int i = 0; i < 1000; i++) {
    series1.add(new TimeSeriesDataItem(new Millisecond(i, 0, 0, 0, 1, 1, 2012), i));
}

TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(series1);

JFreeChart chart = ChartFactory.createXYLineChart("Measured Forces", 
            "Time", "Force in Pounds", dataset, PlotOrientation.VERTICAL, 
        false, false, false);

ChartUtilities.saveChartAsPNG(new File("/home/rfkrocktk/Desktop/chart.png"), chart, 1280, 720);

如何将那些丑陋的1,325,404,800,000值转换为简单的0-1,000个值,表示测量的总时间而不是确切的系统时间?

我一直在寻找符合我要求的构造函数,但我似乎无法找到它们。

3 个答案:

答案 0 :(得分:1)

ChartFactory.createXYLineChart()创建了两个NumberAxis个实例,每个实例对应一个域和范围。作为替代方案,请考虑使用DateAxis作为域的ChartFactory.createTimeSeriesChart()。在任何一种情况下,您都可以在轴上使用setXxxFormatOverride()来获得任何所需的格式。显示的示例here指定了工厂DateFormat

答案 1 :(得分:0)

据我所知,TimeSeries不支持'相对时间'的概念 - 所有x值类型(如Millisecond)都基于java.util.Date,这会产生一个绝对时间。

我认为你最好不要使用XYSeries而不是TimeSeries。然后x值可以是整数。

答案 2 :(得分:0)

诀窍是使用RelativeDateFormatChartFactory.createTimeSeriesChart()进行域轴格式化。这将以#h#m#。### s的格式打印标签。例如,您可能会看到“0h0m2.529s”。

  JFreeChart chart;
  XYPlot plot;
  DateAxis axis;
  TimeSeriesCollection dataset;
  TimeSeries series;
  RelativeDateFormat format;
  long startTime;

  series    = new TimeSeries("Time");
  dataset   = new TimeSeriesCollection(series);
  chart     = ChartFactory.createTimeSeriesChart("Relative", "Elapsed Time", "Value", dataset, true, true, true); 
  plot      = chart.getXYPlot();
  axis      = (DateAxis) plot.getDomainAxis();
  format    = new RelativeDateFormat();
  startTime = System.currentTimeMillis();

  axis.setDateFormatOverride(format);
  format.setBaseMillis(startTime);