JFreechart sendiri tidak dapat menghasilkan grafik SVG, tetapi Anda dapat menggunakan hal lain untuk membantu menghasilkan.
Satu: Java menghasilkan peta kue svg, yang dilengkapi dengan label untuk menunjukkan bagian dari setiap perwakilan warna
paket com.tellhow.svg; "#f2e692", "#aa1111", "#799ae1", "#3e941b", "#66cc00", "#297110", "#d6a97b", "#82522b", "#aaaaff", "#1111aA", "FF2222", "#FFAAAA"}; 'UTF-8'?> "); Sfile.append ("/n "); sfile.append (<svg xmlns: svg = 'http: //www.org/2000/svg'")); (/n "); = 'http://www.w3.org/1999/xlink' "); sfile.append ("/n "); sfile.append (" xml: space = 'default' "); sfile. append ("/ n "); sfile.append (" version = '1.1' width = '100%' tinggi = '100%' viewbox = '0 0 2024 570'> "); sfile.append ("/n ") ;;" <"<" "<Defs> </efs>"); , 0,0,16.384, -9.83) 'xmlns =' http://www.w3.org/2000/svg '> "); sfile.append ("/n "); // cyclic Buat tag path. Path = Creatpath (502, 300, 300, Percents, nama); ); Persentase Array* @param Nama menampilkan nama perwakilan warna* @return*/ public stric string createTpath (double x0, double y0, double [] Percents, string [] nama) {stringBuffer sfile = stringBuffer baru (); x1 = 0; ; ++) == 0) {Radian = GetRadian (Percents [0]); Middlex = (x0+getCos (Textradian*r); midthey = (y0-getsin (Textradian)*r); persen ganda = math.round (Percents [0]*100) /100.0;. K = Math.abs ((((0]*100) /100.0; Midey-y0)/(Midex-X0)); 50; 0) {Saat tipe adalah 0, tampilan peta kue if (textradian <(math.pi/2))) {sfile.append ("<line x1 = '"+middlex+"' y1 = '"+midyey+"' X2 = '"+(Middlex+Math.cos (SITA)*linelen)+"' y2 = '"+(Math.sin (SITA)*Linelen))+"' Stroke = '#000000'/> "); sfile.append ("/n"); textLen))+"'space =' cagar 'font-family =' tahoma 'font-size =' 21 'fill =' stroke = 'Red eline- shift =' baseline '>"+persen+"%</text>" );} Lain if (Textradian> (Math.pi/2) && Textradian <math.pi) {sfile.append ("<line x1 = '"+middlex+"' y1 = '"+midyey+"' x2 = '" +(Middlex-math.cos (SITA)*linen)+"'y2 ='"+(Math.sin (SITA)*linlen))+"'Stroke ='#000000 '/>"); "/n"); "'space =' cagar 'font-family =' tahoma 'font-size =' 21 'fill =' red 'strike =' red 'baseline-shift =' baseline '>"+persen+"%</teks> ");} Lain jika (Textradian> (math.pi) && Textradian <(Math.pi*3/2)) sfile.append (" <line x1 = '"+middlex+"' y1 = '"+midyey+"' x2 = '"+(Middlex-math.cos (Sita)*linelen)+"' y2 = '"+(Midgey+(Math.sin (SITA)*linlen)+"' Stroke = '#000000'/> ") ; *TextLen)+"'space =' cagar 'font-font-font-size =' 21 'Fill =' Red 'Stroke =' Red 'Baseline-Shift =' Baseline '>"+Persen+"%</ext>" ); .COS (SITA)*Linelen)+"'y2 ='"+(Midty+Math.sin (SITA)*Linelen)+"'Stroke ='#000000 '/>"); ); 'Cadangan' font-family = 'tahoma' font-size = '21 'fill =' red 'stroke =' red 'baseline-shift =' baseline '> "+persen+"%</teks> ");} sfile .Perpen ("/n"); +"+r+" a "+r+" "+r+" 0 1 0 "+x1+" "+y1+" l "+x0+"+y0+"z 'fill ='"+warna [0]+"/'/>" );} Else {sfile.append ("<path d = 'm"+x0+""+y0+"l"+(x0+r)+"+r+" a "+r+" "+r+"+x1+"" +y1+"l"+x0+""+y0+"z 'fill ='"+warna [0]+"'/>");} sfile.append ("/n"); +2*r)+"'y ='"+(y0-r/2.0+n)+"'' width = '60 'height =' 30 'fill ='"+warna [i]+"'stroke =' #Fffffff 'stroke-dasharray =' 1,1 ' /> "); sfile.append (" /n "); 2*r+80)+"' y = '"+(y0-r /2.0+n+ 25)+"'spasi =' canggih 'font-family =' font-size = '28' fill = '"+warna [0]+"' stroke = '#000000' stroke-dasharray = '1,1' baseline -Shift = 'Baseline'> "+Names [0]+" </text> "); ("/n ");} else {textradian = radian+(getRadian (persen [i])/2); // dapatkan busur dari garis indikator dan x -axis. ); ; Ketika suatu tipe adalah 0, tampilan peta kue if (Textradian <(Math.pi/2))) {sfile.append ("" <line x1 = '"+midex+"' y1 = '"+middley+"' x2 = '"+(Middlex+Math.cos (SITA)*linelen)+"' y2 = '"+(Math.sin (SITA)*linelen)+"' Stroke = '#000000'/> "); sfile.Append ("/n"); ))+"'space =' preserve 'font-font-font-size =' 21 'Fill =' Red 'Stroke =' Red 'Baseline-Shift =' Baseline '>"+Persen+"%</Text>") ; (Middey- (Math.sin (SITA)*Linelen)+"'Stroke ='#000000 '/>"); Middlex-math.cos (SITA)*TextLen)+"'y ='"+(Math.sin (SITA)*TextLen)+"'Space =' cagar 'font-family =' tahoma 'font- size = '21 'Fill =' red 'stroke =' red 'baseline-shift =' baseline '> "+persen+"%</text> "); adian <(math.pi*3/2))))))) { sfile.append ("<line x1 = '"+middlex+"' y1 = '"+midty+"' x2 = '"+(Middlex-math.cos (SITA)*linelen)+"' y2 = '"+(mthdley+ (Math.sin (SITA)*Linlen))+"'Strong ='#000000 '/>"); SITA)*TextLen)+"'y ='"+(Math.sin (Sita)*TextLen)+"'space =' cagar 'font -family =' tahoma 'font -size = '21' fill = 'red' Stroke = 'Red' Baseline-Shift = 'Baseline'> "+Persen+"%</text> "); Radian> (Math.pi*3/2) && Textradian <(Math.pi*2)) {sfile. append ("<line x1 = '"+middlex+"' y1 = '"+middey+"' x2 = '"+(Middlex+Math.cos (SITA)*linelen)+"' y2 = '"+(Middey+Math .sin (SITA)*Linelen)+"'Stroke ='#000000 ' />"); .cos (SITA)*TextLen)+"'y ='"+(Math.sin (Sita)*TextLen))+"'Space =' Celola 'Font-Family =' Tahoma 'Font-size =' 21 'Isi = 'Red' Stroke = 'Red' Baseline-Shift = 'Baseline'>+Persen+"%"% </text> "");} sfile.Append ("/n"); Dengan lukisan lebih besar dari 180, dan 0 berarti bahwa busur dengan kurang dari 180 (tempat ini lebih penting) jika (getradian (persen [i])> math.pi) {sfile.append ("<path d = ' m "+x0+" "+y0+" l "+x1+" "+y1+" a "+r+" "+r+" 0 "+(x1 = x0+getCos (radian)*r)+"+(y1 = y0- getSin (radian)*r)+"l"+x0+""+y0+"z 'fill ='"+warna [i]+"'/>" "" "" "" ");} else {sfile.Append ("<path d = 'm"+x0+""+y0+"l"+x1+""+y1+"+r+" "+r+" 0 0 "+(x1 = (x1 = x0+getCos (radian)*r )+"+(y1 = y0-getsin (radian)*r)+" l "+x0+" "+y0+" z 'fill =' "+warna [i]+" ' /");} sfile.append ( " /n");} n+= 50; 'width =' 60 'height = '30' fill = '"+color [i]+"' stroke = '#fffffff' dasharray = '1,1' /> "" ") ;;" /n "); sfile.append ("<text x = '"+(x0+2*r+80)+"' y = '"+(y0-r/2.0+n+25)+"' space = 'preserve' font-family font = 'Zongyi' font-size = '28 'fill =' "+warna [0]+" 'stroke ='#000000 'stroke-dasharray =' 1,1 ::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::: 'Baseline-Shift =' Baseline '> "+Nama [i]+" </pext> "); sfile.append ("/n ");}} Kembalikan sfile.toStration ();} // kembalikan busur public static ganda getradian (ganda fenshu) {return (fenshu*math.pi)/50;} // kembali ke sine public static getin getin (double radian) {return Math.sin (Radian);} // Kembali ke Yu Xian Public Static Double GetCOS (Double Radian) {return math.cos (Radian); {3,64,0,284,10}; [2]+"", "+Data [3]+" 个 "," 母线: "+Data [4]+" 个 "}; buat (data, nama);} void statis pribadi membuat data (int [] data [] , String [] nama) {coba {createSvg ("d: /a.svg".getpercent (data), nama);} catch (exception e) {e.printstacktrace ();}} private static double [] getPercent ( Int data []) {sum ganda = 0; } untuk (int i = 0; i <data.length; i ++) {Percents [i] = (data [i]/sum)*100;} return Percents;} public static void createSVG (String filererealpath, double [ ] Percents, string [] names) tion {string sfile = initialize (persents, names); .exist ()) {svgfile.delete ();} fileoutp utstream fos = FileOutputStream baru (svgfile); .getMessage ());}}}}2. Java menghasilkan peta kue 3D SVG.
(Ini dapat menghasilkan grafik, tetapi tidak sempurna, saya tidak lagi memodifikasi kode, karena saya pikir hal ini tidak sepadan, dan JFreechart mungkin lebih baik. Fungsinya lebih kuat, tetapi program -program ini telah membuat saya lebih mengenal SVG. Apa. Apa. Apakah beberapa label di dalamnya?) 3d.) Efek dari efek yang dihasilkan akan memiliki efek kesalahan. Sesuaikan: SVGDeveloper.
paket com.xj.svg; #9aabee ","#3E941B ","#f2e692 ","#66cc00 ","#297110 ","#d6a97b ","#82522b "," #aaaaff ","#1111aa ","#ff22222 "," #Ffaaaa ","#aa1111 "}; public static void main (string [] args) {double data [] = {20,20,50}; coba {createSvg (" f: /f.svg ", getpercent (data );} Catch (Exception e) {e.printstacktrace ();}} string statis inisialisasi (double [] persen) {ganda persents [] = {10,15,5,20,40, 10}; StringBuffer (); 'http://www.w3.org/2000/svg' "); sfile.append ("/n "); sfile.append (" xmlns = 'http://www.w3.org/ 2000/svg' "); sfile.append ("/n "); sfile.append (" xmlns: xlink = 'http: //www.org/1999/xlink' "); n"); = 'default' "); sfile.append ("/n "); sfile.append (" version = '1.1' width = 'height =' 100% 'viewbox =' 0 0 1024 600 '> "); sfile. append ("/n"); (Path); * @param x0 Origin x * @param y0 asal y * @param langr * @param shortr * @param fenshu * @return * / string statis c reatePath (ganda x0, y0 ganda, langr ganda, shortr ganda, ganda persents [] ) {StringBuffer sfile = StringBuffer baru (); Stroke = '#000000' transform = 'matrix (1,0,0,1.638, -9.83)' xmlns = 'http://www.w3.org/2000/svg'> "); sfile.append ("// n "); for (int i = 0; i <persents.length; i ++) {System.out.println (" i: "+i); Radian = Radian+getradian (Percents [i]); // Penggemar pertama yang dibentuk ke kipas angin pertama, jumlah busur. +Radian); 3/2) {xbottom = x0; // x Koordinat ybottom = y0+shortr; Shortr+Tanradian*Tanradian*Langr*Langr; // 底面的 x 坐标 ybottom = y0- (Tanradian*langr*shortr) /math.sqrt (sqvalue); // 底面的 y 坐标} lain jika (Radian> matematika. Pi/2 && radian <= math.pi) {System.out.println ("If2:"+Radian); > Math.pi && Radian <Math.pi* 3/2) {System.out.println ("IF3:"+Radian); (Tanradian*langr*shortr) /math.sqrt (sqvalue);} lain jika (Radian> math.pi*3/2 && radian <math.pi*2) {Systemm .out.println ("if4:"+Radian ); .pi {// lebih besar dari pi busur, yaitu persentase lebih dari 50% sfile "); sfile.append (" <path d = 'm "+x0+" "+y0+" l "+(x0+langr)+" ""+y0+"+langr+" "+shortr+" 0 1 0 "+xbottom+" "+ybottom+" z ' /> "); sfile.append (" /n "); sfile.append (" <path d =' m "+(x0+langr)+" "+(y0-50)+" A "+langr+" "+shortr+" 0 1 0 "+xbottom+" "+(ybottom-50)+" l "+xbottom+"+ybottom+"a"+langr+""+shortr+"0 1 1"+(x0+ langr)+""+y0+"z ' />"); "+(X0+langr)+" "+(y0-50)+" a "+langr+"+shortr+"0 1 0"+xbottom+"+(ybottom-50)+" z '/> "); sfile. append ("/n"); ]+">"); +Y0+"A"+Langr+""+Shortr+"0 0 0"+xbottom+""+ybottom+"z ' />"); X0+langr)+""+(y0-50)+"a"+langr+""+shortr+"0 0 0"+xbottom+"+(ybottom-50)+" l "+xbottom+" "+ybottom+" a " +langr+""+shortr+"0 0 1"+(x0+langr)+""+y0+"z ' />"); m "+x0+" ""+(y0-50)+"l"+(x0+langr)+"+(y0-50)+" a "+langr+" ""+shortr+"0 0 0"+xbottom+" "+(ybottom-50)+" z '/> "); sfile.append ("/n "); sfile.append (" </g> "); sfile. append ("/n ");}} Else {if (Radian == Math.pi/2) {xbottom1 = x0; // x koordinat ybottom1 = y0-shortr; /2) {xbottom1 = x0; // 底面的 x 坐标 ybottom1 = y0+shortr; // 底面的 y 坐标} else {double tanradian = math.abs (math.tan (radian)) ;; *Tanradian*Langr*langr; ybottom1 = y0- (Tanradian*langr*shortr) /Math.sqrt (sqvalue); /Math.sqrt (sqvalue); ; {System.out.println ("i" f4: "+Radian); xbottom1 = x0+(langr*shortr) /Math.sqrt (sqvalue); ybottom1 = y0+(tanradian*langr*shortr) /math.sqrt (sqvalue) ;}} Tradian (Percents [i]) >> Math.pi) {// lebih besar dari pi arc, yaitu, persentase lebih dari 50% system.out.println ("lebih besar dari pi"); ("Gry = '"+Colors [i]+"'>"); +xbottom+""+ybottom+"+langr+" "" "+shortr+" 0 1 0 "+xbottom1+" "+ybottom1+" z ' /> "); sfile.append (" /n "); sfile.papend (" < jalur d = 'm "+(xbottom)+" "" "" "" "")+"a"+langr+""+shortr+"0 1 0"+xbottom1+"+(ybottom1-50)+" l "+ xbottom1+""+ybottom1+"+langr+" "" "" "0 1 1"+xbottom+""+ybottom+"z ' />"); = 'm "+x0+" "+(y0-50)+" l "+(xbottom)+"+(ybottom-50)+"a"+langr+""+shortr+"0 1 0"+xbottom1+""+ (ybottom1-50)+"z '/>"); println ("kurang dari pi"); ""+y0+"l"+xbottom+""+ybottom+"a"+langr+""+shortr+"0 0 0"+xbottom1+""+ybottom1+"z ' />"); ;. +ybottom1+"a"+langr+""+shortr+"0 0 1"+xbottom+""+ybottom+"z ' />"); 50)+"l"+(xbottom)+""+(ybottom-50)+"a"+langr+"+shortr+" 0 0 0 "+xbottom1+"+(ybottom1-50)+"z '/>") ; ;} // kembali ke busur public static double double double (persen ganda) {return (persen*math.pi)/50;} // kembali ke status sine static ganda getSin (double radian) {return math.sin (Radian);} // Kembali ke string getCOS double public public (Radian ganda) {return math.cos (Radian);} private static double [] getPercent (Doube ble Data []) {double sum = 0; [] = Double baru [data.length]; untuk (int i = 0; i <data.length; i ++) {sum+= data [i];} untuk (int i = 0; i <data.length; I ++) {Percents [i] = (Data [i]/sum)*100;} return Percents;} public static void createSVG (String filerereAlpath, ganda [] Percents) {String sfile = inisialisasi (Percents); byte [] bytefil = sfile.getbytes ("UTF-8"); fos.write (bytefil);3. Gunakan JFReechart untuk secara dinamis menghasilkan grafik SVG:
Impor Impor. CategoryDataSet; */ Kelas publik BarchartDemo {public static void main (string [] args) melempar ioException {CategoryDataset dataset = getDataSet (); "Bagan Outlet Buah", // Judul Bagan "Buah", // Label Tampilan "Hasil", // Tag tampilan dari dataset poros numerik, // set data plotorientation.vertikal, // Arah bagan: horizontal, transmisi vertikal // apakah akan menampilkan legenda (untuk diagram kolom sederhana harus salah) false, // apakah akan menghasilkan alat false // apakah tautan url dihasilkan); (0,0.400.300); Image JFreechart Chart = ChartFactory.CreateBarchART3D ("Fruit Outlet", // Tag tampilan "output", // Display Label Dataset, // Data Set Plotorientation.Vertical, // Arah bagan: Horizont Apakah akan menghasilkan tautan URL); jpg, 1, grafik, 400, 300, null);} akhirnya {coba {fos_jpg.close ();} catch (pengecualian e) {}} / ** * Dapatkan objek set data sederhana untuk demonstrasi * * @return * / private staticDataSetaset () {) {) yDataset dataset = New DefaultCategoryDataSet (); (200, 1 "," Lychee "); "" (100, "Beijing", "Apple"); , "Pir"); " Anggur "); dataset. AddValue (300," Guangzhou "," Grape "); dataset.addvalue (400," Beijing "," pisang "); dataset.addvalue (400," Shanghai "," pisang "); Guangzhou ", Pisang"); dataset.addvalue (500, "Beijing", "Litchi"); Dataset.addvalue (500, "Shanghai", "Litchi"); "); JFREECHART ke file SVG. Bagan, File SVGFile) melempar IOEEXECTION Buat dokumen XML domimImImplement domImpl = genericdomImplement.getDomImplement (); / Gambar di bagan generator SVG.dr. ;Saat menggunakan ini, Anda perlu memperhatikan dua poin:
1. JFreechart sendiri tidak dapat menghasilkan grafik SVG, Anda perlu menggunakan Batik.
Batik-Awt-util.jar
batik-dom.jar
batik-svggen.jar
Batik-util.jar
batik-xml.jar
JFreechart -.0.0.jar
2. Dimungkinkan untuk menghasilkan SVG Yang lain disebut Renesis SVG Player, ini pemirsa mendukung Cina.
Konten di atas adalah semua konten dari Java yang dihasilkan Cakes SVG dan JFREECHART menghasilkan grafik SVG.