java - How to display percentage values of label JFreeChart? -
i discovered jfreechart generating simple pie charts. want display pies values of label (in percent) shows label name without value.
here code:
package testpie; // import swing classes import java.awt.*; import java.awt.event.*; import javax.swing.*; // import jfreechart classes import org.jfree.chart.*; import org.jfree.chart.plot.*; import org.jfree.data.*; import org.jfree.data.general.*; public class first extends jpanel { // holds data private defaultpiedataset dataset = new defaultpiedataset(); // create set of charts private jfreechart chart1; private jfreechart chart2; private jfreechart chart3; private jfreechart chart4; // create set of panels can show charts private chartpanel panel1; private chartpanel panel2; private chartpanel panel3; private chartpanel panel4; public first() { // initialize dataset dataset.setvalue( "california", new double(10.0)); dataset.setvalue( "arizona", new double(8.0)); dataset.setvalue( "new mexico", new double(8.0)); dataset.setvalue( "texas", new double(40.0)); dataset.setvalue( "louisiana", new double(8.0) ); dataset.setvalue( "mississippi", new double(4.0)); dataset.setvalue( "alabama", new double(2.0)); dataset.setvalue( "florida", new double(20.0)); // create charts chart1 = chartfactory.createpiechart( "driving time spent per state (flat pie chart)", // chart title dataset, // dataset chart true, // legend required? true, // use tooltips false // configure chart generate urls? ); chart2 = chartfactory.createpiechart( "driving time spent per state (exploded pie chart)", // chart title dataset, // dataset chart true, // legend required? true, // use tooltips false // configure chart generate urls? ); pieplot plot = ( pieplot )chart2.getplot(); plot.setexplodepercent( 3, 0.25 ); chart3 = chartfactory.createpiechart3d( "driving time spent per state (3d pie chart)", // chart title dataset, // dataset chart true, // legend required? true, // use tooltips false // configure chart generate urls? ); chart4 = chartfactory.createpiechart3d( "driving time spent per state (3d transparency)", // chart title dataset, // dataset chart true, // legend required? true, // use tooltips false // configure chart generate urls? ); pieplot3d plot4 = ( pieplot3d )chart4.getplot(); plot4.setforegroundalpha( 0.6f ); // create panel this.setlayout( new gridlayout( 2, 2 ) ); this.panel1 = new chartpanel( chart1 ); this.panel2 = new chartpanel( chart2 ); this.panel3 = new chartpanel( chart3 ); this.panel4 = new chartpanel( chart4 ); this.add( panel1 ); this.add( panel2 ); this.add( panel3 ); this.add( panel4 ); } public static void main( string[] args ) { jframe frame = new jframe( "my trip driving ca fl..." ); first chart = new first(); frame.getcontentpane().add( chart, borderlayout.center ); frame.setsize( 640, 480 ); frame.setvisible( true ); frame.setdefaultcloseoperation( jframe.exit_on_close ); } } i followed this tutorial, can't display values of each labels.
the easy way using old version of jfreechart, such 1.0.1. using version result:

the other way, using recent version of jfreechart such 1.0.19, changing piesectionlabelgenerator. default includes key of data set.
to need create custom label format standard label generator, this:
piesectionlabelgenerator labelgenerator = new standardpiesectionlabelgenerator("{0} = {1}"); and change label generator plots, this:
plot.setlabelgenerator(labelgenerator); with result:

if need %, use in label format {0} = {2} instead of {0} = {1} , displayed california = 10%.
this full example:
public class first extends jpanel { private static final long serialversionuid = 4400735172378226919l; public first() { final defaultpiedataset dataset = new defaultpiedataset(); dataset.setvalue("california", new double(10.0)); dataset.setvalue("arizona", new double(8.0)); dataset.setvalue("new mexico", new double(8.0)); dataset.setvalue("texas", new double(40.0)); dataset.setvalue("louisiana", new double(8.0)); dataset.setvalue("mississippi", new double(4.0)); dataset.setvalue("alabama", new double(2.0)); dataset.setvalue("florida", new double(20.0)); // create custom label generator final piesectionlabelgenerator labelgenerator = new standardpiesectionlabelgenerator("{0} = {1}"); // create charts final jfreechart chart1 = chartfactory.createpiechart("driving time spent per state (flat pie chart)", dataset, true, true, false); final pieplot plot1 = (pieplot) chart1.getplot(); plot1.setlabelgenerator(labelgenerator); final jfreechart chart2 = chartfactory.createpiechart("driving time spent per state (exploded pie chart)", dataset, true, true, false); final pieplot plot2 = (pieplot) chart2.getplot(); plot2.setexplodepercent("3", 0.25); plot2.setlabelgenerator(labelgenerator); final jfreechart chart3 = chartfactory.createpiechart3d("driving time spent per state (3d pie chart)", dataset, true, true, false); final pieplot3d plot3 = (pieplot3d) chart3.getplot(); plot3.setlabelgenerator(labelgenerator); final jfreechart chart4 = chartfactory.createpiechart3d("driving time spent per state (3d transparency)", dataset, true, true, false); final pieplot3d plot4 = (pieplot3d) chart4.getplot(); plot4.setforegroundalpha(0.6f); plot4.setlabelgenerator(labelgenerator); // create panel this.setlayout(new gridlayout(2, 2)); final chartpanel panel1 = new chartpanel(chart1); final chartpanel panel2 = new chartpanel(chart2); final chartpanel panel3 = new chartpanel(chart3); final chartpanel panel4 = new chartpanel(chart4); this.add(panel1); this.add(panel2); this.add(panel3); this.add(panel4); } public static void main(final string[] args) { final jframe frame = new jframe("my trip driving ca fl..."); final first chart = new first(); frame.getcontentpane().add(chart, borderlayout.center); frame.setsize(640, 480); frame.setvisible(true); frame.setdefaultcloseoperation(jframe.exit_on_close); } }
Comments
Post a Comment