JAva生成円グラフsvg及びJFreeChart生成svgグラフ
26496 ワード
Jfreechart自体はSVGパターンを生成することはできませんが、別のものを借りて、生成を補助することができます.
一:Javaはsvg餅図を生成し、各色の代表部分を表示するラベルを添付した.
二.javaはSVG 3 D円グラフを生成する.
(これはグラフィックを生成することができますが、完璧ではありません.私はコードを修正していません.これは価値がないと思いますから、jfreechartを使うほうがいいかもしれません.機能はもっと強いです.ただ、このいくつかのプログラムは、svgというものをもっと理解させました.中のラベルは何に使いますか.など)3 Dのこれは、生成された効果図は、断層の効果があり、主に第1現象と第4象限に現れます.すなわち、第1象限または第4象限に2つの扇形があると断層が現れるので、このツールで調整することができる:SVGDeveloper.はsvgパターンを開き、断層の扇形のコードを逆順に並べ替える.
これを使うときは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グラフのすべてですので、お楽しみください.
一: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("
");
// 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("
");
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グラフのすべてですので、お楽しみください.