我想顯示一段時間內的溫度曲線。我現在讀了一個類似CSV的文件,讓我知道時間和溫度。現在我想使用JFreeChart從這些值中顯示一個XY圖形。看起來 文件的原始數據如下:從CSV文件讀取數據到ArrayList並在XY圖中顯示
utc,local,celsius
2017-07-12T07:02:53+00:00,2017-07-12T09:02:53+02:00,26.25
2017-07-12T08:02:54+00:00,2017-07-12T10:02:54+02:00,26.08
2017-07-12T09:02:55+00:00,2017-07-12T11:02:55+02:00,25.78
2017-07-12T10:02:56+00:00,2017-07-12T12:02:56+02:00,25.96
2017-07-12T10:51:02+00:00,2017-07-12T12:51:02+02:00,26.14
2017-07-12T10:51:02+00:00,2017-07-12T12:51:02+02:00,26.14
時間&溫度值的輸出(I已經從原始文件分開)看起來像:
09:02:53,26.25
10:02:54,26.08
11:02:55,25.78
12:02:56,25.96
12:51:02,26.14
12:51:02,26.14
編輯: 現在我插入創建DateTimeFormatter在例如由trashgold: 它看起來像:
public class Test {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
ApplicationFrame frame = new ApplicationFrame("CSVTest");
Test test = new Test();
frame.add(test.createChart("Temperature profile"));
frame.pack();
frame.setLocationRelativeTo(null);;
frame.setVisible(true);
});
}
private ChartPanel createChart(String chartTitle) {
JFreeChart chart = ChartFactory.createTimeSeriesChart(chartTitle,
"Time", "Temperature", createDataset(), true, true, false);
ChartPanel chartPanel = new ChartPanel(chart);
XYPlot plot = chart.getXYPlot();
DateAxis domain = (DateAxis) plot.getDomainAxis();
domain.setDateFormatOverride(DateFormat.getDateInstance());
plot.setBackgroundPaint(Color.WHITE);
return chartPanel;
}
private XYDataset createDataset() {
TimeSeries series = new TimeSeries("Temperature");
TimeSeriesCollection dataset = new TimeSeriesCollection(series);
try (FileReader fr = new FileReader("TestCSV.csv");
BufferedReader br = new BufferedReader(fr)) {
String line;
br.readLine();
while ((line = br.readLine()) != null) {
String[] split = line.split(",");
System.out.println(ZonedDateTime.parse(split[1]).format(DateTimeFormatter.ISO_LOCAL_TIME) + "," +split[2]);
ZonedDateTime zdt = ZonedDateTime.of(LocalDate.now(),LocalTime.parse(split[0]), ZoneId.systemDefault());
String s = ZonedDateTime.parse(split[0]).format(DateTimeFormatter.ISO_LOCAL_TIME);
Second second = new Second(Date.from(zdt.toInstant()));
series.add(second, Double.valueOf(split[1]));
}
} catch (IOException | SeriesException e) {
System.err.println("Error: " + e);
}
return dataset;
}
類似「CSV」的文件的第一行仍然顯示09:02:53,26.25 然後我得到一個DateTimeParseException:文本'2017-07-12T09:02:53 + 02:00'無法在索引處解析2
Exception in thread "AWT-EventQueue-0" java.time.format.DateTimeParseException: Text '2017-07-12T07:02:53+00:00' could not be parsed at index 2
at java.time.format.DateTimeFormatter.parseResolved0(Unknown Source)
at java.time.format.DateTimeFormatter.parse(Unknown Source)
at java.time.LocalTime.parse(Unknown Source)
at java.time.LocalTime.parse(Unknown Source)
at org.jfree.chart.demo.Test.createDataset(Test.java:63)
at org.jfree.chart.demo.Test.createChart(Test.java:43)
at org.jfree.chart.demo.Test.lambda$0(Test.java:34)
爲什麼文件的其餘部分不能被讀取和不顯示? (「System.out.println」最後只能作爲控件使用)。 DateTimeFomatter是正確的,是嗎?
隨着你的方法,在本地製作的時間我不再來&該程序無法翻譯。是什麼讓我錯了?如果直接輸出如何可以工作
09:02:53,26.25
10:02:54,26.08
11:02:55,25.78
12:02:56,25.96
12:51:02,26.14
12:51:02,26.14
顯示在圖表中嗎?我認爲要像我一樣分裂並改造是好的,是不是?現在我在代碼中設置了DateFormatOverride(),但錯誤消息以及輸出保持不變。
謝謝你的建議。但現在問題是分裂。 「CSV」類似文件被拆分,最後它看起來像「時間和溫度」,看起來像這樣: 2017-07-12T07:02:53 + 00:00,2017-07-12T09:02: 53 + 02:00,26.25 隨着你的方法,在本地製作的時間我不會再來,程序也無法翻譯。是什麼讓我錯了? 如果直接輸出如何工作: 11:02:55,25.78 12:02:56,25.96 顯示在圖表中嗎?我認爲要像我一樣分裂並改造是好的,是不是? – LostInTranslate
看起來你需要一個'DateTimeFormatter';所引用的教程有一節關於解析。現在您已經有了一個工作示例,請[編輯](https://stackoverflow.com/posts/45166365/edit)您的問題,以包含顯示_actual_數據和您的修訂方法的[mcve]。 – trashgod
我有修改的問題,現在編輯添加了相應的錯誤消息 – LostInTranslate