我在我们正在设计的工具中使用Java Swing
了 withJFreeChart
来绘制图表。现在我想将图形数据导出到 CSV 文件。(比如右键单击图形,它应该提供导出到 CSV 的选项,并在选择它时,应该在某个随机位置创建一个 csv 文件并将图形数据保存到其中)。
这里的重点是如何将数据从图形保存到 CSV。我需要使用Java Swing
并JFreeChart
实现这一目标。
我在我们正在设计的工具中使用Java Swing
了 withJFreeChart
来绘制图表。现在我想将图形数据导出到 CSV 文件。(比如右键单击图形,它应该提供导出到 CSV 的选项,并在选择它时,应该在某个随机位置创建一个 csv 文件并将图形数据保存到其中)。
这里的重点是如何将数据从图形保存到 CSV。我需要使用Java Swing
并JFreeChart
实现这一目标。
尝试使用这个:
JFreeChart chart;
// ... initialization of chart
XYDataSet dataSet = chart.getXYPlot().getDataset();
然后使用dataSet
非常简单。
这是一个具体的例子:
private void storeDataSet(JFreeChart chart, String filename) {
java.util.List<String> csv = new ArrayList<>();
if (chart.getPlot() instanceof XYPlot) {
Dataset dataset = chart.getXYPlot().getDataset();
XYDataset xyDataset = (XYDataset) dataset;
int seriesCount = xyDataset.getSeriesCount();
for (int i = 0; i < seriesCount; i++) {
int itemCount = xyDataset.getItemCount(i);
for (int j = 0; j < itemCount; j++) {
Comparable key = xyDataset.getSeriesKey(i);
Number x = xyDataset.getX(i, j);
Number y = xyDataset.getY(i, j);
csv.add(String.format("%s, %s, %s", key, x, y));
}
}
} else if (chart.getPlot() instanceof CategoryPlot) {
Dataset dataset = chart.getCategoryPlot().getDataset();
CategoryDataset categoryDataset = (CategoryDataset) dataset;
int columnCount = categoryDataset.getColumnCount();
int rowCount = categoryDataset.getRowCount();
for (int i = 0; i < rowCount; i++) {
for (int j = 0; j < columnCount; j++) {
Comparable key = categoryDataset.getRowKey(i);
Number n = categoryDataset.getValue(i, j);
csv.add(String.format("%s, %s", key, n));
}
}
} else {
throw new IllegalStateException("Unknown dataset");
}
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename + ".csv"));) {
for (String line : csv) {
writer.append(line);
writer.newLine();
}
} catch (IOException e) {
throw new IllegalStateException("Cannot write dataset", e);
}
}