لا يمكن لـ Jfreechart أن تنشئ رسومات SVG ، ولكن يمكنك استخدام شيء آخر للمساعدة في توليده.
واحد: Java يولد خريطة كعكة SVG ، والتي تأتي مع ملصق لإظهار جزء من كل ممثل اللون
حزمة com.tellhow.svg ؛ "#f2e692" ، "#aa1111" ، "#799ae1" ، "#3E941B" ، "#66CC00" ، "#297110" ، "#D6A97B" ، "#82522B" ، "#AAAAFF" ، "#1111AA" " #ff2222" ، "#ffaaaa"} ؛ "UTF-8"؟> ") ؛ sfile.append ("/n ") (/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 ٪' height = '100 ٪' viewbox = '0 0 2024 570'> ") ؛ sfile.append ("/n ") ؛؛" <"<" <defs> </sefs> ") ؛ ، 0،0،16.384 ، -9.83) 'xmlns =' http://www.w3.org/2000/svg '> ") ؛ sfile.append ("/n ") ؛ // Cyclic إنشاء علامة مسار. string path = 502 ، 300 ، percents ، ) ؛ Percents النسبة المئوية Array* param أسماء عرض ممثل اللون* @return*/ public Stric String CreateR (double x0 ، double y0 ، double [] percents ، string [] X1 = 0 ؛ ؛ ++) == 0) {radian = getRadian (0]) ؛ middlex = (x0+getCos (TextRadian*r) ؛ middley = (y0-getsin (TextRadian)*r) ؛ double ٪ = Math.Round (percents [0]*100) /100.0 ؛. k = math.abs (((((((((((((((((((((((((((((((((((((((((((((((( midey-y0)/(midex-x0) ؛ 50 ؛ 0) {عندما يكون النوع 0 ، عرض خريطة الكيك if (TextRadian <(math.pi/2))) {sfile.append ("<line x1 = '"+middlex+"' y1 = '"+middley+"' ' x2 = '"+(middlex+math.cos (sita)*linelen)+"' y2 = '"+(math.sin (sita)*linelen))+"' Stroke = '#000000'/> ") ؛ sfile.append ("/n") ؛ textlen))+"'Space =' Preserve 'font-family =' tahoma 'font-size =' 21 'fill =' Stroke = 'Red Eline- shift =' baseline '>"+٪+"٪ </text>" ) ؛} آخر إذا (textradian> (Math.pi/2) && Textradian <math.pi) {sfile.append ("<line x1 = '"+middlex+"' y1 = '"+middley+"' x2 = '" +(middlex-math.cos (sita)*linen)+"'y2 ='"+(math.sin (sita)*linlen))+"''#000000 '/>") ؛ "/n") ؛ "" Space = "Preserve 'font-family =' tahoma 'font-size =' 21 'fill =' Red 'Strike =' Red 'baseline-shift =' baseline '>"+٪+"٪ </text> "؛) x2 = '"+(middlex-math.cos (sita)*linelen)+"' y2 = '"+(midgey+(math.sin (sita)*linlen)+"' '#000000'/> ") ؛ *textlen)+"'Space =' Preserve 'font-font-size =' 21 'fill =' Red 'Stroke =' Red 'baseline-shift =' baseline '>"+٪+"٪ </text>" ) ؛ .cos (sita)*linelen)+"'y2 ='"+(middley+math.sin (sita)*linelen)+"'Stroke ='#000000 '/>") ؛ ) ؛ 'preserve' font-family = 'tahoma' font-size = '21 'fill =' Red 'Stroke =' Red 'Baseline-shift =' baseline '> "+٪+" ٪ </text> "") ؛} sfile .append ("/n") ؛ +"+r+" a "+r+" "+r+" 0 1 0 "+x1+" "+y1+" l "+x0+"+y0+"z 'fill ='"+colors [0]+"/>" ) ؛} آخر {sfile.append ("<path d = 'm"+x0+""+y0+"l"+(x0+r)+"+r+" a "+r+" "+r+"+x1+" +y1+"l"+x0+""+y0+"z 'fill ='"+colors [0]+"'/>") ؛} sfile.append ("/n") ؛ +2*r)+"'y ='"+(y0-r/2.0+n)+"'width = '60' height = '30' fill = '"+color [i]+"' Stroke = ' #fffffff 'Stroke-dasharray =' 1،1 ' /> ") ؛ sfile.append (" /n ") ؛ 2*r+80)+" y =' "+(y0-r /2.0+n+ 25)+"" الفضاء = "الحفاظ على" font-family = 'font-size =' 28 'fill =' "+colors [0] -shift = 'baseline'> "+names [0]+" </text> ") ؛ ("/n ") ؛} آخر {textradian = radian+(getRadian (percents [i])/2) ؛ // get قوس خط المؤشر و X-axis. ) ؛ ؛ عندما يكون النوع 0 ، عرض خريطة الكيك 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-Size-Size =' 21 'Fill =' Red 'Stroke =' Red 'Baseline-shift =' baseline '>"+٪+"٪ </text>") ؛ (MADDEY- (MATH.SIN (SITA)*Linelen)+"Stroke = '#000000'/>") ؛ middlex-math.cos (sita)*textlen)+"'y ='"+(math.sin (sita)*textlen)+"'space =' preserve 'font-family =' tahoma 'font- size = '21 'fill =' 'Red' Stroke = 'Red' baseline-shift = 'baseline'> "+٪+" ٪ </text> ") ؛ adian <(math.pi*3/2)))))))) { sfile.append ("<line x1 = '"+middlex+"' y1 = '"+middley+"' x2 = '"+(middlex-math.cos (sita)*linelen)+"y2 ='"+(mthdley+ (Math.sin (SITA)*Linlen)+"Strong = '#000000'/>") ؛ sita)*textlen)+"'y ='"+(math.sin (sita)*textlen)+"'space =' preserve 'font -family =' tahoma 'font -size = '21' fill = 'Red' stroke = 'red' baseline-shift = 'baseline'> "+٪+" ٪ </text> ") ؛ radian> (math.pi*3/2) && textradian <(math.pi*2)) {sfile. إلحاق ("<line x1 = '"+middlex+"' y1 = '"+middley+"' x2 = '"+(middlex+math.cos (sita)*linelen)+"' y2 = '"+(middley+math .sin (sita)*linelen) .cos (sita)*textlen)+"'y ='"+(math.sin (sita)*textlen))+"'space =' preserve 'font-family =' tahoma 'font-size =' 21 'fill = "Red 'Stroke =' Red 'Baseline-shift =' baseline '>+٪" ٪ "٪ </text>" ") ؛} sfile.append ("/n ") ؛ مع لوحة أكبر من 180 ، و 0 يعني أن القوس مع أقل من 180 (هذا المكان أكثر أهمية) إذا (getRadian (percents [i])> math.pi) {sfile.append ("<path d = '' M "+X0+" "+y0+" l "+x1+" "+y1+" a "+r+" getin (radian)*r)+"l"+x0+""+y0+"z 'fill ='"+colors [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 =' "+color [i]+" ' /") ؛} sfile.append ( " /n") ؛} n+= 50 ؛ 'width =' 60 'height = '30' fill = '"+colors [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-fore-family = 'Zongyi' font-size = '28 'fill =' "+colors [0]+" 'Stroke ='#000000 'Stroke-Dasharray =' 1،1 :::::::::::::::: ::::::::::::::::::::::::: :::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::::::::::::::: ::::::::::::::: "الأساس شيفت =" خط الأساس ">"+أسماء [i]+"</text>") ؛ sfile.append ("/n") ؛}} return sfile.tostration () ؛} // إرجاع القوس العام الثابت الثابت الثابت (double fenshu) {return (fenshu*math.pi)/50 ؛} // return to the sine public static getin (double radian) {return Math.sin (Radian) ؛} // العودة إلى Yu Xian Public Static Double Getcos (double radian) {return Math.cos (Radian) ؛ {3،64،0،284،10} ؛ [2]+"" ، "+Data [3]+" 个 "،" 母线: "+data [4]+" 个 "} ؛ إنشاء (بيانات ، أسماء) ؛} إنشاء فراغ ثابت خاص (int [] بيانات ، string [] names) {try {createSvg ("d: /a.svg"،getpercent (data) ، names) ؛} catch (استثناء e) {E.PrintStackTrace () ؛}} private static double [] gotpercen int data []) {double sum = 0 ؛ } لـ (int i = 0 ؛ i <data.length ؛ i ++) {percents [i] = (data [i]/sum)*100 ؛} return percents ؛} void static static createSvg (سلسلة filererealpath ، مزدوجة [ ] percents ، string [] tion {string sfile = percents ، .exist ()) {svgfile.delete () ؛ .getMessage ()) ؛}}}}2. جافا يولد خريطة كعكة SVG 3D.
(يمكن أن يولد هذا الرسومات ، لكن غير كامل ، لم أعد أعدل الكود ، لأنني أعتقد أن هذا الشيء لا يستحق كل هذا العناء ، وقد يكون Jfreechart أفضل. الوظيفة أقوى ، لكن هذه البرامج جعلتني أعرف SVG أكثر. هي بعض الملصقات فيه؟) ضبط: SVGDeveloper.
حزمة 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} ؛ try {createSvg (" f: /f.svg "، gotpercen )) 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' ") = 'default' ") ؛ sfile.append ("/n ") ؛ sfile.append (" version = '1.1' width = 'height =' 100 ٪ 'viewbox =' 0 0 1024 600 '> ") ؛ sfile. إلحاق (/n ") ؛ (path) ؛ * param x0 Origin x * param y0 Origin y * param langr * param shortr * param fenshu * return * / static string c reatepath (double x0 ، double y0 ، double langr ، double shortr ، double percents [] ) 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 <percents.length ؛ i ++) {system.out.println (" i: "+i) ؛ radian = radian+getRadian (percents [i]) ؛ // أول مروحة على شكل المروحة الأولى ، مجموع القوس. +راديان) ؛ 3/2) {xbottom = x0 ؛ shortr+tanradian*tanradian*langr*langr ؛ // 底面的 x 坐标 ybottom = y0- (tanradian*langr*shortr) /math.sqrt (sqvalue) ؛ // 底面的 y 坐标 坐标} آخر إذا (radian> math. 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) ؛} آخر إذا (radian> math.pi*3/2 && radian <math.pi*2) {systemm .out.println ("if4:"+radian ) ؛ .pi {// أكبر من قوس pi ، أي نسبة مئوية أكثر من 50 ٪ sfile.append ("<gry =" ") ؛ 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. إلحاق (/n ") ؛ ]+">") ؛ +y0+"a"+langr+""+shortr+"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 ") ؛}} آخر {if (radian == Math.pi/2) {xbottom1 = x0 ؛ /2) {xbottom1 = x0 ؛ // 底面的 x 坐标 ybottom1 = y0+shortr ؛ // 底面的 y 坐标} {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) {// أكبر من pi ، أي نسبة أكثر من 50 ٪ system.out.println ("أكبر من Pi") ؛ (<gry = '"+colors [i]+"'> ") ؛ +xbottom+""+ybottom+"+langr+" ""+shortr+"0 1 0"+xbottom1+""+ybottom1+"z ' />) ؛ sfile.append (" /n ") ؛ sfile.append (" path d = 'm "+(xbottom)+" "" "" "" "")+"a"+langr+""+shortr+"0 1 0"+xbottom1+"+(ybottom1-50)+" l " Xbottom1+"+ybottom1+"+langr+"" "" 0 1 "+xbottom+"+ybottom+"z ' />") ؛ = 'm "+x0+" "+(y0-50)+" l "+(xbottom)+"+(ybottom-50)+"a"+langr+""+shortr+"0 1 0"+xbottom1+"+"+"+ (ybottom1-50)+"z '/>") ؛ println ("أقل من Pi") ؛ "+y0+" l "+xbottom+" "+ybottom+" a "+langr+" "+shortr+" 0 0 0 " ؛ +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 '/>") ؛ ؛} // العودة إلى ARC Public Static Double Double Double (double ٪) {Return (٪*Math.pi)/50 ؛ (Radian) ؛} // العودة إلى سلسلة GetCos الثابتة (Double Radian) {Return Math.cos (radian) ؛} مزدوج ثابت [] GetPercent (Dou ble Data []) {double sum = 0 ؛ [] = new double [data.length] ؛ for (int i = 0 ؛ i <data.length ؛ i ++) {sum+= data [i] ؛} لـ (int i = 0 ؛ i <data.length ؛ i ++) {percents [i] = (data [i]/sum)*100 ؛} return percents ؛} createSvg (string filererealpath ، double [] percents) {String sfile = initialize (percents) ؛ byte [] bytefil = sfile.getbytes ("utf-8") ؛ fos.write (bytefil) ؛3. استخدم Jfreechart لإنشاء رسومات SVG ديناميكيًا:
استيراد java.awt. Catevorydataset ؛ */ الفئة العامة Barchartdemo {public static void main (string [] args) يلقي ioException {catevorydataset "فاكهة مخرج مخطط" ، // عنوان الرسم البياني "الفاكهة" ، // عرض تسمية "العائد" ، // علامات العرض لمجموعة بيانات العمود العددي ، // مجموعة البيانات المؤامرة. ، // ما إذا كنت تريد عرض أسطورة (للحصول على مخططات الأعمدة البسيطة يجب أن تكون خاطئة) ، // ما إذا كنت تريد إنشاء أداة false // ما إذا كان رابط URL يتم إنشاؤه) ؛ (0،0،400،300) ؛ Image Jfreechart Chart = ChartFactory.CreateBarchArt3D ("Outlet Outlet" ، // علامات العرض "الإخراج" ، // عرض مجموعة بيانات تسمية ، // مجموعة البيانات المؤامرة. JPG ، 1 ، الرسم البياني ، 400 ، 300 ، خالية) ؛} أخيرًا {try {fos_jpg.close () ؛} catch (استثناء e) {}} / ** * احصل / staticdatasetaset () {) (200 ، "1" ، "Lychee") ؛ "،" lychee ") ؛ إرجاع مجموعة بيانات ؛} / *** احصل على مجموعة بيانات مجموعة تستخدمها العرض التوضيحي * * * * / خاص الفئة الثابت (100 ، "Beijing" ، "Apple") ؛ ، "الكمثرى") ؛ العنب ") ؛ مجموعة البيانات. AddValue (300 ،" Guangzhou "،" Grape ") ؛ Dataset.addvalue (400 ،" Beijing "،" Banana ") ؛ dataset.addvalue (400 ،" Shanghai "،" Banana ") ؛ Guangzhou) ؛ "،" Banana ") ؛ Dataset.addvalue (500 ،" Beijing "،" Litchi ") ؛ Jfreechart إلى ملف SVG. الرسم البياني ، حدود الملف ، svgfile) ioeexception إنشاء domimplement domimpl = genericdomplement.getdomplement () ؛ / ارسم المخطط في SVG Generator. ؛عند استخدام هذا ، تحتاج إلى الانتباه إلى نقطتين:
1. Jfreechart نفسها لا يمكن أن تنشئ رسومات SVG ، تحتاج إلى استخدام Batik.
باتيك آوه-أوتيل
باتيك دوم
Batik-Svggen.Jar
باتيك-أوتيل
Batik-XML.Jar
Jfreechart -.0.0.jar
2. من الممكن توليد SVG آخر يسمى Renesis SVG Player ، وهذا المشاهد يدعم الصينية.
المحتوى أعلاه هو جميع محتويات Java التي تم إنشاؤها Cakes SVG و JFreechart التي تم إنشاؤها SVG.