相性はよかろうという安易な考えで書いてみた。
流れとしては、
- 適当に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 件のコメント:
コメントを投稿