沒有說你必須使用TimeSeries
或RegularTimePeriod
。工廠方法ChartFactory.createTimeSeriesChart()
將接受任何XYDataset
,其中域表示來自Java epoch的毫秒。下面的例子擴展了AbstractXYDataset
以綜合一系列的日子。您的實施將不得不規範化Excel日期,這些日期使用不同的epoch。
附錄:Apache POI包括執行轉換的靜態DateUtil.getJavaDate()
方法。結果時間可以直接用於您選擇的數據集。一個完整的例子可以發現here。
import java.awt.Dimension;
import java.text.DateFormat;
import java.util.Date;
import javax.swing.JFrame;
import org.jfree.chart.*;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.AbstractXYDataset;
import org.jfree.data.xy.XYDataset;
/** @see https://stackoverflow.com/a/12481509/230513 */
public class AbstractXYTest {
private static XYDataset createDataset() {
return new AbstractXYDataset() {
private static final int N = 16;
private final long t = new Date().getTime();
@Override
public int getSeriesCount() {
return 1;
}
@Override
public Comparable getSeriesKey(int series) {
return "Data";
}
@Override
public int getItemCount(int series) {
return N;
}
@Override
public Number getX(int series, int item) {
return Double.valueOf(t + item * 1000 * 3600 * 24);
}
@Override
public Number getY(int series, int item) {
return Math.pow(item, 1.61);
}
};
}
private static JFreeChart createChart(final XYDataset dataset) {
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"Test", "Day", "Value", dataset, false, false, false);
XYPlot plot = (XYPlot) chart.getPlot();
DateAxis domain = (DateAxis) plot.getDomainAxis();
domain.setDateFormatOverride(DateFormat.getDateInstance());
return chart;
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
XYDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart) {
@Override
public Dimension getPreferredSize() {
return new Dimension(800, 300);
}
};
f.add(chartPanel);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
首先,感謝您抽出時間來回答我的問題。我想避免這種手工編碼的解決方案。我希望我可以指出一個圖書館,我可以用它來簡單地將日常數據點轉換爲每週數據點,並將每週的所有日常數據點(M-S)加在一起。 – Techogre
對不起,我知道沒有這樣的圖書館。我首先將Excel日期轉換爲數據模型中的Java日期。您可以從適當的本地化默認視圖開始,並讓用戶選擇替代方案,如[建議](http://stackoverflow.com/a/5522583/230513)中所述。 – trashgod
無論如何謝謝你。如果我找到它,我會繼續尋找並重新發布。 – Techogre