jFreeChart

Olá Amigos,

Estou com um problema, eu tenho um gráfico conforme a imagem abaixo, e eu queria que a linha com os zeros não fosse impressa. Agradeço a todos que puderem me ajudar.


Segue abaixo o código fonte:

package br.com.avanti.grafico;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.text.DecimalFormat;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.IntervalMarker;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.Layer;
import org.jfree.ui.RectangleAnchor;
import org.jfree.ui.RefineryUtilities;
import org.jfree.ui.TextAnchor;

public class LineChartDemo1 extends ApplicationFrame {

public LineChartDemo1(String title) {
	super(title);
	// TODO Auto-generated constructor stub
	final CategoryDataset dataset = createDataSet();
	final JFreeChart chart        = createChart(dataset); 
	final ChartPanel chartPanel   = new ChartPanel( chart );
	chartPanel.setPreferredSize( new Dimension( 800, 300 ) );
	setContentPane( chartPanel );
	
}

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

/**
 * @param args
 */

private CategoryDataset createDataSet(){
	
	// row keys
	final String series1 = "Indicador Anual";
	
	// column keys...
	final String janeiro = "Jan";
	final String fevereiro = "Fev";
	final String marco = "Mai";
	final String abril = "Abr";
	final String maio = "Mar";
	final String junho = "Jun";
	final String julho = "Jul";
	final String agosto = "Ago";
	final String setembro = "Set";
	final String outubro = "Out";
	final String novembro = "Nov";
	final String dezembro = "Dez";
	
	final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
	
	dataset.addValue( 3.31, series1, janeiro );
	dataset.addValue( 30.50, series1, fevereiro );
	dataset.addValue( 41.56, series1, marco);
	dataset.addValue( 67.96, series1, abril);
	dataset.addValue( 98.82, series1, maio);
	dataset.addValue( 0.00, series1, junho);
	dataset.addValue( 0.00, series1, julho);
	dataset.addValue( 0.00, series1, agosto);
	dataset.addValue( 0.00, series1, setembro);
	dataset.addValue( 0.00, series1, outubro);
	dataset.addValue( 0.00, series1, novembro);
	dataset.addValue( 0.00, series1, dezembro);
	
	return dataset;
}

private JFreeChart createChart( final CategoryDataset dataset ){
	
	final JFreeChart chart = ChartFactory.createLineChart(
			"", 
			"", 
			"", 
			dataset, 
			PlotOrientation.VERTICAL, 
			true, 
			false, 
			true);
	
	
	// Definindo cor de fundo do gráfico
	chart.setBackgroundPaint( Color.white );
	
	// Pegando a plotagem do gráfico para modificar o gráfico
	final CategoryPlot plot = (CategoryPlot) chart.getPlot();
	plot.setBackgroundPaint( Color.white );
	
	// Definindo valores no eixo y
	plot.getRangeAxis().setRange(0, 130);
	
	// Definindo a escala do eixo y do gráfico
	NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();
	numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
	numberAxis.setAutoRangeIncludesZero(false);
	numberAxis.setTickUnit(new NumberTickUnit(20));
	numberAxis.setRange(0, 110);
	
	// Mudando a cor da linha do gráfico
	CategoryItemRenderer categoryitemrenderer = plot.getRenderer();
	categoryitemrenderer.setSeriesPaint(0, Color.decode("#000066"));

	// Mudando a espessura da linha do gráfico
	final LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
    renderer.setSeriesStroke( 0, 
    		new BasicStroke(0.7f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
    						0.0f, new float[] {1.0f, 1.0f}, 0.0f ));

    // Exibindo os valores nas linhas do gráfico
    renderer.setSeriesItemLabelsVisible(0, true);
    StandardCategoryItemLabelGenerator labelGenerator = 
    	new StandardCategoryItemLabelGenerator("{2}",new DecimalFormat("#,##0.00##"));
    renderer.setSeriesItemLabelPaint(0, Color.decode("#000066"));
    renderer.setSeriesItemLabelFont(0, new Font( "SansSerif", Font.PLAIN, 10));
    renderer.setSeriesItemLabelGenerator(0, labelGenerator); 
    
    // Exibindo a gráfico princiapl 
    renderer.setSeriesShapesVisible(0, true);
    
    // Definindo as cores de fundo do gráfico conforme eixo y
    final IntervalMarker target = new IntervalMarker(0.0, 80.0);
    target.setLabel("");
    target.setLabelFont(new Font("SansSerif", Font.ITALIC, 11));
    target.setLabelAnchor(RectangleAnchor.LEFT);
    target.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
    target.setPaint( Color.decode( "#FFD2D2" ) );
    target.setOutlinePaint( Color.BLACK );
    target.setOutlineStroke( new BasicStroke(1.1f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
											 0.0f, new float[] {1.0f, 1.0f}, 0.0f ) ) ;
    plot.addRangeMarker(target, Layer.BACKGROUND);
    
    final IntervalMarker target1 = new IntervalMarker(80.0, 90.0);
    target1.setLabel("");
    target1.setLabelFont(new Font("SansSerif", Font.ITALIC, 11));
    target1.setLabelAnchor(RectangleAnchor.LEFT);
    target1.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
    target1.setPaint( Color.decode( "#FFFFD2" ) );
    target1.setOutlinePaint( Color.BLACK );
    target1.setOutlineStroke( new BasicStroke(1.1f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
			 				 				  0.0f, new float[] {1.0f, 1.0f}, 0.0f ) ) ;
    plot.addRangeMarker(target1, Layer.BACKGROUND);

    final IntervalMarker target2 = new IntervalMarker(90.0, 120.0);
    target2.setLabel("");
    target2.setLabelFont(new Font("SansSerif", Font.ITALIC, 11));
    target2.setLabelAnchor(RectangleAnchor.LEFT);
    target2.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
    target2.setPaint( Color.decode( "#D2FFD2" ) );
    target2.setOutlinePaint( Color.BLACK );
    target2.setOutlineStroke( new BasicStroke(1.1f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
			 				 				  0.0f, new float[] {1.0f, 1.0f}, 0.0f ) ) ;
    plot.addRangeMarker(target2, Layer.BACKGROUND);

    final IntervalMarker target3 = new IntervalMarker(120.0, 240.0);
    target3.setLabel("");
    target3.setLabelFont(new Font("SansSerif", Font.ITALIC, 11));
    target3.setLabelAnchor(RectangleAnchor.LEFT);
    target3.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
    target3.setPaint( Color.decode( "#FFFFD2" ) );
    target3.setOutlinePaint( Color.BLACK );
    target3.setOutlineStroke( new BasicStroke(1.1f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
			 				 				  0.0f, new float[] {1.0f, 1.0f}, 0.0f ) ) ;

    plot.addRangeMarker(target3, Layer.BACKGROUND);
    
    
	return chart;
	
}

public static void main(String[] args) {
	// TODO Auto-generated method stub
	final LineChartDemo1 demo = new LineChartDemo1( "Line Chart Demo" );
	demo.pack();
	RefineryUtilities.centerFrameOnScreen( demo );
	demo.setVisible( true );

}

}

Olá Amigos,

Consegui resolver esse problema, quando eu não quero que um determinado valor apareca, mas quero que os valores x apareçam, é só eu preencher meu dataset da seguinte forma

dataset.addValue( null, series1, junho);
dataset.addValue( null, series1, julho);
dataset.addValue( null, series1, agosto);
dataset.addValue( null, series1, setembro);
dataset.addValue( null, series1, outubro);
dataset.addValue( null, series1, novembro);
dataset.addValue( null, series1, dezembro);

Abraços

marca teu código como “Code”…
Senão não tem santo que ajude!

ok, vou fazer isso, obrigado pela dica.

Abraços

[quote=Zenas]Olá Amigos,

Estou com um problema, eu tenho um gráfico conforme a imagem abaixo, e eu queria que a linha com os zeros não fosse impressa. Agradeço a todos que puderem me ajudar.[/quote]

oi… por favor, vc ensina aprender para ver como fazer a programação de programar e o primeiro de Arquivo :“nova projeto de que é nome só” depois, colocar de criar classe principal se que escreve javaaplicativo é normal só outra coisa se escrever javaaplicativo.LineGenerator[/u],só , segunda de biblicotecas que pegar a programar de “JFreeChart: Line Chart Demo 6”[u], adicionarJAR/pasta ou propriedade que JFreechart-1.13,só, terceira escrever “line chart demo 6"se apagar outra escrever as palavras de grafico, x também tempo,Y se apagar outra escrever " tensao”, o primeiro de F6 abrir se a programar de grafico…muito bom.[color=blue] [/color]