JAva生成円グラフsvg及びJFreeChart生成svgグラフ

26496 ワード

Jfreechart自体はSVGパターンを生成することはできませんが、別のものを借りて、生成を補助することができます.
一:Javaはsvg餅図を生成し、各色の代表部分を表示するラベルを添付した.

package com.tellhow.svg;
import java.io.File;
import java.io.FileOutputStream;
/**
 * 
 * @author   NO.1
 *
 */
public class CakySvgWithLabel {
 //       
 static String[] colors ={"#f2e692", "#aa1111", 
   "#799AE1", "#3e941b", 
   "#66cc00", "#297110", 
   "#d6a97b", "#82522b", 
   "#aaaaff", "#1111aa", 
   "#ff2222", "#ffaaaa"};
 static String initialize(double [] percents,String[]names){
 StringBuffer sfile = new StringBuffer();
 sfile.append("");
 sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); // path . String path =creatPath(502, 300, 300, percents,names);// 503,300. sfile.append(path); sfile.append("
"); sfile.append("
"); sfile.append(""); return sfile.toString(); } /** * * @param x0 * @param y0 * @param r * @param percents * @param names * @return */ public static String creatPath(double x0,double y0,double r,double[]percents,String[]names){ StringBuffer sfile =new StringBuffer(); double x1=0; // x double y1=0; // y double middleX=0; // , double middleY=0; double radian =0; // double textRadian=0; // double k=0; int N=10; for(int i=0;i"); sfile.append("
"); sfile.append(""+percent+"%"); }else if ((textRadian>(Math.PI/2)&&textRadian"); sfile.append("
"); sfile.append(""+percent+"%"); }else if ((textRadian>(Math.PI)&&textRadian"); sfile.append("
"); sfile.append(""+percent+"%"); }else if((textRadian>(Math.PI*3/2)&&textRadian"); sfile.append("
"); sfile.append(""+percent+"%"); } sfile.append("
"); if(getRadian(percents[0])>Math.PI){ sfile.append(""); }else{ sfile.append(""); } sfile.append("
"); } sfile.append(""); sfile.append("
"); sfile.append(""+names[0]+""); sfile.append("
"); }else{ textRadian = radian+(getRadian(percents[i])/2);// X . radian =radian+getRadian(percents[i]);// i middleX=(x0+getCos(textRadian)*r); middleY=(y0-getSin(textRadian)*r); double percent = Math.round(percents[i]*100)/100.0; k=Math.abs((middleY-y0)/(middleX-x0)); double lineLen=50; double textLen=70; if(radian<6){ lineLen=90; textLen=110; } double sita= Math.atan(k); if(percents[i]!=0){// 0 , if((textRadian"); sfile.append("
"); sfile.append(""+percent+"%"); }else if ((textRadian>(Math.PI/2)&&textRadian"); sfile.append("
"); sfile.append(""+percent+"%"); }else if ((textRadian>(Math.PI)&&textRadian"); sfile.append("
"); sfile.append(""+percent+"%"); }else if((textRadian>(Math.PI*3/2)&&textRadian"); sfile.append("
"); sfile.append(""+percent+"%"); } sfile.append("
"); // 1 180 , 0 180 ( ) if(getRadian(percents[i])>Math.PI){ sfile.append(""); }else{ sfile.append(""); } sfile.append("
"); } N+=50; sfile.append(""); sfile.append("
"); sfile.append(""+names[i]+""); sfile.append("
"); } } return sfile.toString(); } // public static double getRadian(double fenshu){ return (fenshu*Math.PI)/50; } // public static double getSin(double radian){ return Math.sin(radian); } // public static double getCos(double radian){ return Math.cos(radian); } public static void main(String[] args) { int[] data= {3,64,0,284,10}; String[] names={" :"+data[0]+" "," :"+data[1]+" "," :"+data[2]+" "," :"+data[3]+" "," :"+data[4]+" "}; create(data,names); } private static void create(int[] data,String[] names) { try { createSVG("d:/a.svg",getPercent(data),names); } catch (Exception e) { e.printStackTrace(); } } private static double[] getPercent(int data[]){ double sum=0; double percents[] = new double[data.length]; for(int i=0;i

二.javaはSVG 3 D円グラフを生成する.
(これはグラフィックを生成することができますが、完璧ではありません.私はコードを修正していません.これは価値がないと思いますから、jfreechartを使うほうがいいかもしれません.機能はもっと強いです.ただ、このいくつかのプログラムは、svgというものをもっと理解させました.中のラベルは何に使いますか.など)3 Dのこれは、生成された効果図は、断層の効果があり、主に第1現象と第4象限に現れます.すなわち、第1象限または第4象限に2つの扇形があると断層が現れるので、このツールで調整することができる:SVGDeveloper.はsvgパターンを開き、断層の扇形のコードを逆順に並べ替える.

package com.xj.svg; 
 
import java.io.File; 
import java.io.FileOutputStream; 
 
public class Caky3DSVG { 
 static String[] colors ={"#d6a97b", 
        "#22FF22", "#aaffaa", "#799AE1", 
        "#9aabEe", "#3e941b", "#f2e692", 
        "#66cc00", "#297110", "#d6a97b", 
        "#82522b", "#aaaaff", "#1111aa", 
        "#ff2222", "#ffaaaa", "#aa1111" 
        }; 
 public static void main(String[] args) { 
  double data[] = {20,20,50}; 
   try { 
   createSVG("f:/f.svg",getPercent(data)); 
   } catch (Exception e) { 
    e.printStackTrace(); 
   } 
 } 
 static String initialize(double [] percent){ 
  double percents[] = {10,15,5,20,40,10}; 
  StringBuffer sfile = new StringBuffer(); 
  sfile.append(""); 
  sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); String path = createPath(502, 300,300, 150, percents); sfile.append(path); sfile.append(""); sfile.append("
"); sfile.append(""); return sfile.toString(); } /** * * @param x0 X * @param y0 Y * @param langR * @param shortR * @param fenshu * @return */ static String createPath(double x0,double y0,double langR,double shortR ,double percents[]){ StringBuffer sfile = new StringBuffer(); double xBottom =0; double yBottom =0; double xBottom1=0; double yBottom1=0; double radian =0; sfile.append(""); sfile.append("
"); for(int i=0;iMath.PI/2&&radian<=Math.PI){ System.out.println("if2:"+radian); xBottom =x0-(langR*shortR)/Math.sqrt(sqValue); yBottom =y0-(tanRadian*langR*shortR)/Math.sqrt(sqValue); }else if (radian>Math.PI&&radianMath.PI*3/2&&radianMath.PI){// PI , 50% sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append("
"); sfile.append("
"); }else{ sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append("
"); sfile.append("
"); } }else{ if(radian==Math.PI/2){ xBottom1= x0;// x yBottom1= y0-shortR;// y }else if(radian==Math.PI*3/2){ xBottom1 = x0;// x yBottom1 = y0+shortR;// y } else{ double tanRadian = Math.abs(Math.tan(radian)); double sqValue=shortR*shortR+tanRadian*tanRadian*langR*langR; if(radianMath.PI/2&&radian<=Math.PI){ System.out.println("if2:"+radian); xBottom1 =x0-(langR*shortR)/Math.sqrt(sqValue); yBottom1 =y0-(tanRadian*langR*shortR)/Math.sqrt(sqValue); }else if (radian>Math.PI&&radianMath.PI*3/2){ System.out.println("if4:"+radian); xBottom1 = x0+(langR*shortR)/Math.sqrt(sqValue); yBottom1 = y0+(tanRadian*langR*shortR)/Math.sqrt(sqValue); } } if(getRadian(percents[i])>Math.PI){// PI , 50% System.out.println(" pi"); sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append("
"); sfile.append("
"); }else{ System.out.println(" pi"); sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append(""); sfile.append("
"); sfile.append("
"); sfile.append("
"); } xBottom=xBottom1; yBottom=yBottom1; } } return sfile.toString(); } // public static double getRadian(double percent){ return (percent*Math.PI)/50; } // public static double getSin(double radian){ return Math.sin(radian); } // public static double getCos(double radian){ return Math.cos(radian); } private static double[] getPercent(double data[]){ double sum=0; double percents[] = new double[data.length]; for(int i=0;i

. Jfreechart svg :


import java.awt.Rectangle; 
import java.io.*; 
import org.jfree.chart.*; 
import org.apache.batik.dom.GenericDOMImplementation; 
import org.apache.batik.svggen.SVGGraphics2D; 
import org.jfree.data.category.CategoryDataset; 
import org.jfree.data.category.DefaultCategoryDataset; 
import org.jfree.chart.plot.*; 
import org.w3c.dom.DOMImplementation; 
import org.w3c.dom.Document; 
/** 
 *                 
 */ 
public class BarChartDemo { 
 public static void main(String[] args) throws IOException { 
  CategoryDataset dataset = getDataSet(); 
  //   JFreeChart  ,              
  JFreeChart chart = ChartFactory.createBarChart3D("     ", //      
    "  ", //          
    "  ", //          
    dataset, //     
    PlotOrientation.VERTICAL, //     :  、   
    true, //       (           false) 
    false, //        
    false //     URL   
    ); 
  File fo_svg = new File("D:\\fruit3.svg"); 
  Rectangle bounds = new Rectangle(0,0,400,300); 
  exportChartAsSVG(chart,bounds,fo_svg); 
 } 
 
 private static void exportChartAsJPG() throws FileNotFoundException, IOException { 
  //     Dataset 
  CategoryDataset dataset = getDataSet(); 
  //   JFreeChart  ,              
  JFreeChart chart = ChartFactory.createBarChart3D("     ", //      
    "  ", //          
    "  ", //          
    dataset, //     
    PlotOrientation.VERTICAL, //     :  、   
    true, //       (           false) 
    false, //        
    false //     URL   
    ); 
 
  FileOutputStream fos_jpg = null; 
  try { 
   fos_jpg = new FileOutputStream("D:/fruit3.jpg"); 
   ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 400, 300, null); 
  } finally { 
   try { 
    fos_jpg.close(); 
   } catch (Exception e) { 
   } 
  } 
 } 
 
 /** 
  *                 
  * 
  * @return 
  */ 
 private static CategoryDataset getDataSet() { 
  DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 
  dataset.addValue(100, "1", "  "); 
  dataset.addValue(200, "1", "  "); 
  dataset.addValue(200, "1", "  "); 
  dataset.addValue(300, "2", "  "); 
  dataset.addValue(400, "2", "  "); 
  dataset.addValue(500, "2", "  "); 
  return dataset; 
 } 
 
 /** 
  *                 
  * 
  * @return 
  */ 
 private static CategoryDataset getDataSet2() { 
  DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 
  dataset.addValue(100, "  ", "  "); 
  dataset.addValue(100, "  ", "  "); 
  dataset.addValue(100, "  ", "  "); 
  dataset.addValue(200, "  ", "  "); 
  dataset.addValue(200, "  ", "  "); 
  dataset.addValue(200, "  ", "  "); 
  dataset.addValue(300, "  ", "  "); 
  dataset.addValue(300, "  ", "  "); 
  dataset.addValue(300, "  ", "  "); 
  dataset.addValue(400, "  ", "  "); 
  dataset.addValue(400, "  ", "  "); 
  dataset.addValue(400, "  ", "  "); 
  dataset.addValue(500, "  ", "  "); 
  dataset.addValue(500, "  ", "  "); 
  dataset.addValue(500, "  ", "  "); 
  return dataset; 
 } 
  
 /** 
  * Exports a JFreeChart to a SVG file. 
  * 
  * @param chart JFreeChart to export 
  * @param bounds the dimensions of the viewport 
  * @param svgFile the output file. 
  * @throws IOException if writing the svgFile fails. 
  */ 
 private static void exportChartAsSVG(JFreeChart chart, Rectangle bounds, File svgFile) throws IOException { 
  // Get a DOMImplementation and create an XML document 
  DOMImplementation domImpl = 
   GenericDOMImplementation.getDOMImplementation(); 
  Document document = domImpl.createDocument(null, "svg", null); 
 
  // Create an instance of the SVG Generator 
  SVGGraphics2D svgGenerator = new SVGGraphics2D(document); 
 
  // draw the chart in the SVG generator 
  chart.draw(svgGenerator, bounds); 
 
  // Write svg file 
  OutputStream outputStream = new FileOutputStream(svgFile); 
  Writer out = new OutputStreamWriter(outputStream, "UTF-8"); 
  svgGenerator.stream(out, true /* use css */);       
  outputStream.flush(); 
  outputStream.close(); 
 } 
} 

これを使うときは2点に注意しなければなりません.
1.jfreechart自体はsvgグラフィックを生成できません.batik.javaツールパッケージ、apacheを使用する必要があります.
batik-awt-util.jar batik-dom.jar   batik-svggen.jar   batik-util.jar batik-xml.jar jfreechart-1.0.0.jar
2.svgを生成する可能性があります.あなたが見ている間に中国語をサポートしません.インストールされているadobeのビューアであれば、IEで閲覧すると中国語の文字化けしているようです.もう一つのRenesis SVG Playerというビューアであれば、このビューアは中国語をサポートしているのを覚えています.
以上がjava生成円グラフsvgおよびJFreeChart生成svgグラフのすべてですので、お楽しみください.