Olá Amigos,
Estou com uma dúvida para criar um Grafico Utilizando o jFreeChart, eu quero que as cores de fundo do gráfico sejam apresentadas a partir das faixas de valores do eixo x, no caso de Jan à Dez e a outra dúvida é, que os textos da linha do gráfico sejam afastados. A imagem do gráfico e código seguem abaixo:
Agradeço a todos que puderem me ajudar.
Abraços
[code]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 java.text.NumberFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
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 = "Mar";
final String abril = "Abr";
final String maio = "Mai";
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( 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);
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 );
CategoryAxis categoryaxis = plot.getDomainAxis();
// Define a orientação e o ângulo de impressão dos labels do eixo
categoryaxis.setAxisLineVisible(false);
categoryaxis.setLabelPaint( Color.BLACK );
categoryaxis.setLowerMargin( 0.001 );
categoryaxis.setUpperMargin(0.001);
// Definindo a escala do eixo y do gráfico
NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();
// Definindo escala do gráfico e maior valor
numberAxis.setTickUnit(new NumberTickUnit(20));
numberAxis.setRange(0, 130);
// fazer o eixo ficar próximo do menor valor
numberAxis.setAutoRangeIncludesZero(false);
numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
// 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 linha do gráfico
renderer.setSeriesShapesVisible(0, true);
// 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);
// 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 );
}
}[/code]