我正在尝试制作一个非常简单的图表,用于绘制在一秒钟内测量力的图表。我有简单的例子,它输出如下图:
这是我的代码:
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个值,表示测量的总时间而不是确切的系统时间?
我一直在寻找符合我要求的构造函数,但我似乎无法找到它们。
答案 0 :(得分:1)
ChartFactory.createXYLineChart()
创建了两个NumberAxis
个实例,每个实例对应一个域和范围。作为替代方案,请考虑使用DateAxis
作为域的ChartFactory.createTimeSeriesChart()
。在任何一种情况下,您都可以在轴上使用setXxxFormatOverride()
来获得任何所需的格式。显示的示例here指定了工厂DateFormat
。
答案 1 :(得分:0)
据我所知,TimeSeries不支持'相对时间'的概念 - 所有x值类型(如Millisecond)都基于java.util.Date,这会产生一个绝对时间。
我认为你最好不要使用XYSeries而不是TimeSeries。然后x值可以是整数。
答案 2 :(得分:0)
诀窍是使用RelativeDateFormat与ChartFactory.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);