-1

我在我们正在设计的工具中使用Java Swing了 withJFreeChart来绘制图表。现在我想将图形数据导出到 CSV 文件。(比如右键单击图形,它应该提供导出到 CSV 的选项,并在选择它时,应该在某个随机位置创建一个 csv 文件并将图形数据保存到其中)。

这里的重点是如何将数据从图形保存到 CSV。我需要使用Java SwingJFreeChart实现这一目标。

4

2 回答 2

3

尝试使用这个:

JFreeChart chart;
// ... initialization of chart
XYDataSet dataSet = chart.getXYPlot().getDataset();

然后使用dataSet非常简单。

于 2012-08-22T06:01:03.903 回答
1

这是一个具体的例子:

   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);
      }
   }
于 2019-10-23T20:04:01.943 回答