Jfreechart сам не может генерировать графику SVG, но вы можете использовать другую вещь, чтобы помочь генерировать.
ОДИН: Java генерирует карту тортов SVG, которая поставляется с этикеткой, чтобы показать часть каждого представителя цвета
Пакет com.tellhow.svg; "#F2E692", "#AA1111", "#799AE1", "#3E941B", "#66CC00", "#297110", "#D6A97B", "#825222B", "#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%' height = '100%' viewbox = '0 0 2024 570'> "); sfile.append ("/n ") ;;" <"<" <"<ffics> </defs>"); , 0,0,16,384, -9,83) 'xmlns =' http://www.w3.org/2000/svg '> "); sfile.append ("/n "); // Циклическое создание тега пути. Строка = CreatePath (502, 300, 300, Percents, имена); ); Percents процентный массив* @param Отображайте имя представителя цвета* @return*/ public Stric CreatePath (Double x0, Double Y0, Double [] Percents, String [] names) {StringBuffer sfile = new StringBuffer (); x1 = 0; ; ++) == 0) {radian = getRadian (percents [0]); middlex = (x0+getcos (textradian*r); middley = (y0-getsin (textradian)*r); двойной процент = математика. midey-y0)/(midex-x0); 50; 0) {Когда тип равен 0, отображение карты торта if (textradian <(math.pi/2)))) {sfile.append ("<line x1 = '"+middlex+"' y1 = '"+middlety+"' ' X2 = '"+(middlex+math.cos (sita)*linelen)+"' y2 = '"+(math.sin (sita)*linelen))+"' ucke = '#000000'/> "); sfile.append ("/n"); Textlen))+"'Space =' serve’ font-family = 'tahoma' font-size = '21' fill = 'rosck =' red eline- shift = 'baseline'> "+процент+"%</text> " );} Else if (textradian> (math.pi/2) && textradian <math.pi) {sfile.append ("<line x1 = '"+middlex+"' y1 = '"+middlety+"' x2 = '" +(middlex-math.cos (sita)*лен)+"'y2 ='"+(math.sin (sita)*linlen))+"'ucke ='#000000 '/>"); "/n"); "Space = 'serve’ font-family =' tahoma 'font-size =' 21 'fill =' red 'Strate =' red 'baseline-shift =' baseline '> "+процент+"%</text> ");} Else if (textradian> (math.pi) && textradian <(math.pi*3/2))) sfile.append (" <line x1 = '"+middlex+"' y1 = '"+middlety+"' ' x2 = '"+(middlex-math.cos (sita)*linelen)+"' y2 = '"+(midgey+(math.sin (sita)*linlen)+"' rosck = '#000000'/> ") ;; *Textlen)+"'Space =' Serve Serever 'font-font-font-size =' 21 'fill =' red 'ucke =' red 'baseline-shift =' baseline '>"+процент+"%</text>" ); .cos (sita)*linelen)+"'y2 ='"+(средняя+матча. ); «Сохранить» font-family = 'tahoma' font-size = '21 'fill =' red 'rosck =' red 'baseline-shift =' baseline '> "+процент+"%</text> "");} sfile .append ("/n"); +"+r+" a "+r+" "+r+" 0 1 0 "+x1+" "+y1+" l "+x0+"+y0+"z 'fill ='"+colors [0]+"/>" );} Else {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]+" #Ffffffff 'Inscle-Dasharray =' 1,1 ' /> "); sfile.append (" /n "); 2*r+80)+"' y = '"+(y0-r /2.0+n+ 25)+"" Space = 'serveer "font-family =' font-size = '28' fill = '"+colors [0]+"' rosck = '#000000' ucke-dasharray = '1,1' Базовый уровень -Shift = 'baseline'> "+names [0]+" </text> "); ("/n ");} else {textradian = radian+(getradian (percents [i])/2); // get дуга индикаторной линии и оси x. ); ; Когда тип равен 0, отображение карты торта if (textradian <(math.pi/2)))) {sfile.append ("" <line x1 = '"+midex+"' y1 = '"+middlety+"' x2 = ''+(middlex+math.cos (sita)*linelen)+"'y2 ='"+(math.sin (sita)*linelen)+"'rosck ='#000000 '/>"); sfile.append ("/n"); ))+"'space =' servere 'font-font-font-size =' 21 'fill =' red 'sturck =' red 'baseline-shift =' baseline '>"+процент+"%</text>") ; (Middey- (math.sin (sita)*linelen)+"'rosce ='#000000 '/>"); Middlex-math.cos (sita)*textlen)+"'y ='"+(math.sin (sita)*textlen)+"'space =' сохранить 'font-family =' tahoma 'font- size = '21 'Fill =' red 'ucke =' red 'baseline-shift =' baseline '> "+процент+"%</text> "); adian <(math.pi*3/2)))))))) { sfile.append ("<line x1 = '"+middlex+"' y1 = '"+middlety+"' x2 = '"+(middlex-math.cos (sita)*linelen)+"y2 ='"+(mthdley+ (math.sin (sita)*linlen)+"'strong ='#000000 '/>"); sita)*textlen)+"'y ='"+(math.sin (sita)*textlen)+"" space = 'serve ’font -family =' tahoma 'font -size = '21' fill = 'red' Chroke = 'red' Baseline-Shift = 'Baseline'> "+процент+"%</text> "); Radian> (Math.pi*3/2) && textradian <(math.pi*2)) {sfile. Append ("<Line x1 = '"+middlex+"' y1 = '"+middlety+"' x2 = '"+(middlex+math.cos (sita)*linelen)+"' y2 = '"+(средняя+математика .sin (sita)*linelen)+"'ucke ='#000000 ' />"); .cos (sita)*textlen)+"'y ='"+(math.sin (sita)*textlen))+"" space = 'servere' font-family = 'tahoma' font-size = '21' заполнение = 'Red' Щелк = 'red' Baseline-shift = 'Baseline'>+процент+"%"% </text> "");} sfile.append ("/n"); // Параметр 1 указывает, что дуга дуга с картиной больше 180, а 0 означает, что дуга с менее чем 180 (это место более важно), если (getradian (percents [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 ='"+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]+"' rosck = '#fffffff' dasharray = '1,1' /> "") ;; " /n"); sfile.append ("<text x = '"+(x0+2*r+80)+"' y = '"+(y0-r/2,0+n+25)+"Space =' serve’ font-family = 'Zongyi' font-size = '28 'fill =' "+colors [0]+" 'ucke ='#000000 'ucke-dasharray =' 1,1 ::::::::::::: ::::::::::::::::: ::::::::::::::::: ::::::::::::::: '' Baseline-shift = 'baseline'> "+names [i]+" </text> "); sfile.append ("/n ");}} Вернуть sfile.tostration ();} // возвращать дуговую публику. Math.sin (Radian);} // Возвращение обратно в Yu Xian Public Static Double Double Getcos (Double Radian) {return Math.cos (Radian); {3,64,0,284,10}; [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; } for (int i = 0; i <data.length; i ++) {percents [i] = (data [i]/sum)*100;} return percents;} public static void createvg (String fileerErelpath, Double [Double [Double [Double [Double [Double [Double [Double [Double ] Percents, string [] names) .exist ()) {svgfile.delete ();} fileOutp utStream fos = new FileOutputStream (svgfile); .getMessage ());}}}}2. Java генерирует карту 3D торта SVG.
(Это может генерировать графику, но несовершенно, я больше не изменял код, потому что я думаю, что эта вещь не стоит того, и JFreeChart может быть лучше. Функция сильнее, но эти программы заставили меня узнать SVG. Есть ли некоторые из меток в нем?) Отрегулируйте: Svgdeveloper.
Пакет com.xj.svg; #9AABEE", "#3E941B", "#F2E692", "#66cc00", "#297110", "#D6A97B", "#82522B", "#aaaaff", "#1111aa", "#ff22222 "," #FFAAAA ","#aa11111 "}; public static void main (string [] args) {double data [] = {20,20,50}; try {createSvg (" f: /f.svg ", getPercent (данные );} Catch (Exception e) {e.printstacktrace ();}} static string инициализировать (Double [] процент) {Double Percents [] = {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"); = 'по умолчанию' "); sfile.append ("/n "); sfile.append (" version = '1,1' ширина = '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 (двойной x0, двойной y0, двойной лангр, двойной шортр, двойные перспективы [] {stringbuffer sfile = new StringBuffer (); #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]); // Первый вентилятор -с первым вентилятором, сумма ARC. +Radian); 3/2) {xbottom = x0; Shortr+tanradian*tanradian*langr*langr; // 底面的 x 坐标 ybottom = y0- (tanradian*langr*shortr) /math.sqrt (sqvalue); // 底面的 y 坐标} else if (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);} else if (radian> math.pi*3/2 && radian <math.pi*2) {Systemm .out.println ("if4:"+Radian ); .pi {// больше дуги PI, то есть процент более чем 50% sfile.append ("<gry = '"+color [i]+"'>"); "); 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 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; /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); /Mamath.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) {// больше, чем дуга, то есть в процентах от более чем 50% system.out.println («больше, чем pi»); («<gry = '"+colors [i]+">"); +xbottom+""+ybottom+"+langr+" "" "+shortr+" 0 1 0 "+xbottom1+" "+ybottom1+" z ' /> "); sfile.append (" /n "); sfile.append (" < Путь 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 ("меньше pi"); "+y0+" l "+xbottom+" "+ybottom+" a "+langr+" "+shortr+" 0 0 0 "+xbottom1+" "+ybottom1+" z ' /> "); ; = 'M "+(xbottom)+" ""+(ybottom-50)+"a"+langr+""+shortr+"0 0"+xbottom1+"+(ybottom1-50)+" l "+xbottom1+" +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 Proct) {return (процент*math.pi)/50;} // Возврат обратно в синусное состояние Static Double Getsin (Double Radian) {return Math.sin (Radian);} // возвращается в строку Public Static Double GetCos (Double Radian) {return Math.cos (Radian);} Частный статический двойной [] getpercent (Double Data []) {Double Sum = 0; [] = New Double [data.length]; I ++) {percents [i] = (data [i]/sum)*100;} return percents;} public static void createvg (string fileererealpath, double [] percents) {string sfile = инициализировать (percents); byte [] bytefil = sfile.getbytes ("utf-8"); fos.write (bytefil);3. Используйте JFreeChart для динамического генерации графики SVG:
Импорт Java.awt.Rectangle; Категория */ Public class barchartdemo {public static void main (string [] args) бросает ioException {CategoryDataset DataSet = getDataSet (); «Диаграмма фруктовых выходов», // название диаграммы «Фрукты», // метка отображения «урожайность», // теги дисплея набора данных численного вала, // набор данных plotoration.vertical, // Направление диаграммы: горизонтальная, вертикальная трансмиссия , // Отображение легенды (для простых диаграмм столбцов должны быть ложными), // создать ли инструмент false //, создана ли ссылка URL); (0,0,400,300); Image jfreechart chart = chartfactory.createbarchart3d ("Fruit Outlet", // Теги дисплея "Вывод", // Дисплей набор меток, // набор данных plotoryentation.vertical, // Направление диаграммы: горизонт, создать ли ссылку URL); jpg, 1, диаграмма, 400, 300, null);} наконец {try {fos_jpg.close ();} catch (Exception e) {}} / ** * Получить простой объект набора данных для демонстрации * * @Return * / private staticdatasetaset () {) {) ydataset dataet = new DefaultCategoryDataset (); (200, "1", "Lychee"); "," lychee "); return DataSet;} / *** Получите один набор комбинации данных, используемый для демонстрации * * * @return * / private static categoryDatasetAsetAset2 () {defaultCategoryDatasetAset = new DefaultCategoryDaset (); DataSet.Add (100, "Пекин", "Apple"); , «Груша»); Виноград "); DataSet. AddValue (300," Guangzhou "," Grape "); DataSet.AddValue (400," Пекин "," Банан "); Гуансат. "," Banana "); DataSet.AddValue (500," Пекин "," Litchi "); DataSet.AddValue (500," Shanghai "," Litchi ");"); JfreeChart в файл SVG. Диаграмма, границы прямоугольника, файл svgfile). / Нарисовать диаграмму в диаграмме генератора SVG. ;При использовании этого необходимо обратить внимание на два балла:
1. Jfreechart не может генерировать графику SVG, вам нужно использовать Batik.
Batik-Awt-util.jar
Batik-Dom.Jar
Batik-Svggen.jar
Batik-util.jar
BATIK-XML.JAR
jfreechart -.0.0.jar
2. Можно сгенерировать SVG Еще один называется Renesis SVG Player, этот зритель поддерживает китайцев.
Вышеупомянутое содержание - это содержимое Java, сгенерированные тортами SVG и JFreechart, сгенерированные SVG.