Exibindo a porcentagem em um PieChart (JFreeChart)

10 respostas
A

Ola pessoal… nao consigo exibir as porcentagens de cada porcao da torta em um PieChart… OBS.: utilizando JFreeChart. Imagino que seja uma coisa bem simples, pois em todos exemplos do mesmo que vejo lah esta a porcentagem. Enfim, alguem sabe como eu habilito-as??

Abracos!

10 Respostas

S

Amigo, segue um exemplo de um grafico pizza com as devidas porcentagens .. oq vc deve acrescentar está comentado

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class GraficoPizzaDemo extends ApplicationFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public GraficoPizzaDemo() {
		super(null);
		this.setTitle("Grafico de Pizza");
		JPanel jpanel = PanelDemostracao();
		jpanel.setPreferredSize(new Dimension(500, 270));
		setContentPane(jpanel);
	}

	private static PieDataset criaDadosGrafico() {
		DefaultPieDataset defaultpiedataset = new DefaultPieDataset();
		defaultpiedataset.setValue("Conteúdo 1", 43.23D);
		defaultpiedataset.setValue("Conteúdo 2", 10D);
		defaultpiedataset.setValue("Conteúdo 3", 27.5D);
		defaultpiedataset.setValue("Conteúdo 4", 17.5D);
		defaultpiedataset.setValue("Conteúdo 5", 11D);
		defaultpiedataset.setValue("Conteúdo 6", 19.39D);
		return defaultpiedataset;
	}

	private static JFreeChart criaGrafico(PieDataset piedataset) {
		JFreeChart jfreechart = ChartFactory.createPieChart(
				"Gráfico Pizza Demo ", piedataset, true, true, false);
		PiePlot plotagem = (PiePlot) jfreechart.getPlot();
		plotagem.setLabelGenerator(new StandardPieSectionLabelGenerator(
				"{0} ({2})"));//define porcentagem no gráfico
		plotagem.setLabelBackgroundPaint(new Color(220, 220, 220));
		return jfreechart;
	}

	public static JPanel PanelDemostracao() {
		JFreeChart jfreechart = criaGrafico(criaDadosGrafico());
		return new ChartPanel(jfreechart);
	}

	public static void main(String args[]) {
		GraficoPizzaDemo demo = new GraficoPizzaDemo();
		demo.pack();
		RefineryUtilities.centerFrameOnScreen(demo);
		demo.setVisible(true);
	}
}

Falowww

T+

A

Legal cara!! Funcionou que eh uma beleza!! Abracos!

A

E pra um grafico de Barras?? tem como exibir as porcentagens??

P

Oi, do jeito que está

pieplot3d.setLabelGenerator(new StandardPieSectionLabelGenerator(
         "{0} ({2})"));

ele mostra o porcentagem, mas por exemplo de 3 regiões com valor 33, ele mostra 33% pra cada, como que so so fizesse para números inteiros.
Sabe como eu altero isso:

obrigado!

P

olá, conseguisse resolver o problema de só mostrar valores inteiros nas porcentagens de gráficos??

M

Boa tarde!

Pra resolver esse problema de apresentar as casas decimais para as porcentagens, vc terá que criar uma classe de customização e indicar ela na propriedade " customizer class" do seu gráfico de pizza, procure no google ou aqui no forum por " Customizer class for PieChart3D" vc vai achar vários exemplos.

Att.

P

tens algum exemplo que possa me passar?
não encontrei nenhum exemplo muito claro…

Att,

M

Bom dia!!

Segue um exemplo:

public class JasperPieChartCustomizer implements JRChartCustomizer
{
	private static final int DECIMALS = 2;
	private static final String DEFAULT_FORMAT = "{0} {1} {2}";

    public void customize(JFreeChart jFreeChart, JRChart jrChart)
    {
    	Plot plot = jFreeChart.getPlot();

    	if (!(plot instanceof PiePlot))
    		return;

		PiePlot piePlot = (PiePlot) plot;
		PieSectionLabelGenerator labelGen = piePlot.getLabelGenerator();
		PieSectionLabelGenerator legendGen = piePlot.getLegendLabelGenerator();

		String labelFormat = labelGen instanceof StandardPieSectionLabelGenerator ?
			((StandardPieSectionLabelGenerator) labelGen).getLabelFormat() :
			DEFAULT_FORMAT;
		String legendFormat = legendGen instanceof StandardPieSectionLabelGenerator ?
			((StandardPieSectionLabelGenerator) legendGen).getLabelFormat() :
			DEFAULT_FORMAT;

    	Locale locale = Util.getLocale();
    	NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
    	NumberFormat percFormat = NumberFormat.getPercentInstance(locale);
    	percFormat.setMinimumFractionDigits(DECIMALS);

	    StandardPieSectionLabelGenerator newLabelGen = new StandardPieSectionLabelGenerator(
			labelFormat, numberFormat, percFormat);
		piePlot.setLabelGenerator(newLabelGen);

	    StandardPieSectionLabelGenerator newLegendGen = new StandardPieSectionLabelGenerator(
	    	legendFormat, numberFormat, percFormat);
		piePlot.setLegendLabelGenerator(newLegendGen);
    }
}

Att.

P

Funcionou perfeitamente!!

muitooo obrigada!!

:smiley:

A

Muito bom, eu estava precisando exibir as porcentagens e funcionou perfeitamente.

Sds

Criado 20 de novembro de 2006
Ultima resposta 3 de nov. de 2011
Respostas 10
Participantes 6