1

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

在此处输入图像描述

这是我的代码:

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 值,代表测量的总时间而不是确切的系统时间?

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

4

3 回答 3

1

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

于 2012-09-28T00:29:59.217 回答
0

据我所知,TimeSeries 不支持“相对时间”的概念——所有 x 值类型(如毫秒)都基于 java.util.Date,它产生一个绝对时间。

我认为使用 XYSeries 而不是 TimeSeries 可能会更好。那么 x 值可以是整数。

于 2012-09-27T21:49:25.850 回答
0

诀窍是通过ChartFactory.createTimeSeriesChart()使用RelativeDateFormat进行域轴格式设置。这会以#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);
于 2013-07-23T20:29:01.373 回答