2

使用XChart我可以制作漂亮的图表。当我制作图表时,我可以右键单击它,然后会出现“另存为”的选项。然后,我可以通过单击将图像以指定格式保存到指定目录。

我怎样才能编写为我自动执行此操作的 Java 代码?也就是说,我有一个创建大约 50 个图形的应用程序,我不想在每次运行应用程序时手动将每个图形保存到它所属的位置。

这是我制作图表的方法:

private void makeLineChart(int[][] data, String title) {
    MyLineChart c = new MyLineChart(data, title);
    XYChart chart = c.getChart();
    new SwingWrapper<XYChart>(chart).displayChart();
    // save as pdf...?
}
4

2 回答 2

2

xchart 的示例代码有解决方案。BitmapEncoder 可以在您每次启动应用程序时执行此操作。BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.PNG);

public class Example1 {

public static void main(String[] args) throws Exception {
 double[] yData = new double[] { 2.0, 1.0, 0.0 };
// Create Chart
XYChart chart = new XYChart(500, 400);
chart.setTitle("Sample Chart");
chart.setXAxisTitle("X");
chart.setXAxisTitle("Y");
XYSeries series = chart.addSeries("y(x)", null, yData);
series.setMarker(SeriesMarkers.CIRCLE);

BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.PNG);
BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.JPG);
BitmapEncoder.saveJPGWithQuality(chart, "./Sample_Chart_With_Quality.jpg", 0.95f);
BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.BMP);
BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.GIF);

BitmapEncoder.saveBitmapWithDPI(chart, "./Sample_Chart_300_DPI", BitmapFormat.PNG, 300);
BitmapEncoder.saveBitmapWithDPI(chart, "./Sample_Chart_300_DPI", BitmapFormat.JPG, 300);
BitmapEncoder.saveBitmapWithDPI(chart, "./Sample_Chart_300_DPI", BitmapFormat.GIF, 300);

VectorGraphicsEncoder.saveVectorGraphic(chart, "./Sample_Chart", VectorGraphicsFormat.EPS);
VectorGraphicsEncoder.saveVectorGraphic(chart, "./Sample_Chart", VectorGraphicsFormat.PDF);
VectorGraphicsEncoder.saveVectorGraphic(chart, "./Sample_Chart", VectorGraphicsFormat.SVG);

} }

于 2017-05-21T15:22:59.093 回答
0

黎明的答案类似,但对 OP 的问题更具体一些,并且仅将输出写入 PDF。

可以使用 来编写 PDF ,如“将图表另存为位图”VectorGraphicsEncoder标题下的示例中所示。

在这里,我将示例精简为相关信息:

package com.example;

import java.io.IOException;

import org.knowm.xchart.VectorGraphicsEncoder;
import org.knowm.xchart.VectorGraphicsEncoder.VectorGraphicsFormat;
import org.knowm.xchart.XYChart;
import org.knowm.xchart.XYSeries;
import org.knowm.xchart.style.markers.SeriesMarkers;

public class TryXchartToPdf extends XchartBase {
    /**
     * Creates a simple Chart and saves it as a PDF file.
     * @throws IOException
     */

    public static void main(String[] args) throws IOException {

        double[] yData = new double[] { 2.0, 1.0, 0.0 };

        // Create Chart
        XYChart chart = new XYChart(500, 400);
        chart.setTitle("Sample Chart");
        chart.setXAxisTitle("X");
        chart.setXAxisTitle("Y");
        XYSeries series = chart.addSeries("y(x)", null, yData);
        series.setMarker(SeriesMarkers.CIRCLE);

        VectorGraphicsEncoder.saveVectorGraphic(chart, "./Sample_Chart", VectorGraphicsFormat.PDF);

    }
}
于 2021-04-22T19:20:31.690 回答