相性はよかろうという安易な考えで書いてみた。
流れとしては、
- 適当にJFreeChartのグラフを作る
- SVGGraphics2D(キャンバスみたいなもん)を作成
- Rectangle2Dを作成
- SVGUtilsで出力
どれくらいのサイズで出力するかを設定する感じ。
一先ず動きゃええの精神で作っているので品質は保証しません。
package variouslibraries.javalearning.jfree;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.io.File;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.graphics2d.svg.SVGGraphics2D;
import org.jfree.graphics2d.svg.SVGUtils;
public class JFreeChartSVGOutput {
public static void main(String[] args) {
// (1)データセットの作成
String series1 = "First";
String series2 = "Second";
String series3 = "Third";
// カテゴリーの設定
String category1 = "Category 1";
String category2 = "Category 2";
String category3 = "Category 3";
String category4 = "Category 4";
String category5 = "Category 5";
String category6 = "Category 6";
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(3.0, series1, category1);
dataset.addValue(2.0, series1, category2);
dataset.addValue(4.0, series1, category3);
dataset.addValue(4.0, series1, category4);
dataset.addValue(4.0, series1, category5);
dataset.addValue(6.0, series1, category6);
dataset.addValue(5.0, series2, category1);
dataset.addValue(3.0, series2, category2);
dataset.addValue(6.0, series2, category3);
dataset.addValue(5.0, series2, category4);
dataset.addValue(6.0, series2, category5);
dataset.addValue(5.0, series2, category6);
dataset.addValue(6.0, series3, category1);
dataset.addValue(7.0, series3, category2);
dataset.addValue(7.0, series3, category3);
dataset.addValue(6.0, series3, category4);
dataset.addValue(5.0, series3, category5);
dataset.addValue(7.0, series3, category6);
// (2)JFreeChartオブジェクトの生成
JFreeChart chart = ChartFactory.createLineChart("Sample Line Chart", "Category", "Value", dataset, PlotOrientation.VERTICAL, true, true, false);
chart.setAntiAlias(true);
// (3)グラフの出力
SVGGraphics2D svg = new SVGGraphics2D(640, 480);
Rectangle2D rectangle = new Rectangle(640, 480);
chart.draw(svg, rectangle);
try {
SVGUtils.writeToSVG(new File("./SampleLineChart.svg"), svg.getSVGElement());
} catch (IOException e) {
e.printStackTrace();
}
}
}
出力される画像は以下のような感じ。実際のファイルだと拡大縮小してもスムーズな線のままです。
(したのファイルはpngにしているのでそうもいきません。)
Inkscapeやらで読み込むと一つ一つの線やら背景やらを
編集できるけど、使い道は知らない。

0 件のコメント:
コメントを投稿