Graficos jfreechart com barra e linha junto

Ola pessoal, andei procurando e n encontrei nenhum exemplo de como gerar um grafico misto com linha e barra juntos…
sera q alguem tem algum exemplo ai???

afinal tem o jfreechart-1[1].0.0-demo.jnlp… e nele e mostrado todas as funcionalidades do jfreechart, e la tem varios graficos mistos…

desde ja obrigado…

[color=darkblue] [/color]

cara n cheguei a testar o teu codigo, mas a principio pelo q vi vc mandou duas classes que geram dois graficos…
posso ter me explicado mal ou quem sabe n interpretei o teu codigo…
eu tenho q gerar um unico grafico que deve conter informações na forma de barra e informações na forma de linha…

obrigado por tentar me ajudar, pois estou louco já!!!

n encontro em lugar nenhum exemplo de grafico misto(barra e linha junto)…

c alguem puder me ajudar!!

Me passa seu email que eu tenho um documento que com certeza vai te ajudar…

Você já conseguiu resolver esse problema? Eu fiz um grafico com linhas e colunas juntos utilizando a bliblioteca JFreeChart e criando uma imagem para gerar relátorio.

fiz o software em delphi e entreguei …
mas n vou desistir do java…
c possivel pode postar o exemplo???
pra todos q tiver a mesma dificuldade ter acesso a um exemplo pratico…

no aguardo.

fiz o software em delphi e entreguei …
mas n vou desistir do java…
c possivel pode postar o exemplo???
pra todos q tiver a mesma dificuldade ter acesso a um exemplo pratico…

no aguardo.

Bom tarde.

Você poderia me ajudar?

Fiz a instalação do jdk1.6.0 de acordo com o tutorial que temos no GUJ,
criei a variável de ambiente, mas estou tentando usar o JfreeChart e não consigo sendo que o tutorial do JfreeChart menciona que devemos colocar o arquivos(JfreeChart) na classpath fiz isso mas não funcionou gostaria da ajuda de alguém que já tenha passado por esse tipo de problema ou saiba como me ajudar.

obrigado.

Crie uma nova thread em vez de aproveitar uma que já estava encerrada.

De qualquer maneira, os arquivos do JFreeChart que devem estar no seu CLASSPATH são, pelo menos:

jfreechart-1.0.6.jar
jcommon-1.0.10.jar

que vêm dentro daquele arquivo zip do JFreeChart.

Uma dica é arranjar o manual PDF do JFreeChart, cujo nome normalmente é jfreechart-1.0.6-US.pdf (o recomendado é comprá-lo com o sr. Gilbert, que é quem faz o software, mas provavelmente você deve achá-lo facilmente por aí.)

O JFreeChart é extremamente complexo (estou há dois meses mexendo direto com isso e ainda há muitas coisas que não sei direito sobre ele), portanto o recomendado seria, se possível, arranjar o tal manual.

Não sabia que vc era do “time” dos JFreeCharters Thingol.Já comi um dobrado para implementar umas features “extra-API”, como uma IntervalBarChart, que um francês gente fina do fórum dele(do JFreeChart) me ajudou.Aliás, minha principal dica aquem quer mexer a fundo com o JFreeChart é frequentar o fórum dele em http://www.jfree.org/phpBB2/
Há muitos problemas resolvidos por lá.
Ah, o Developers Guide1.06 tá atualmente por 48,5 dólares, e vc ganha todos os códigos de exemplo e 12 meses de atualização a quem possa interessar. :wink:

ola Ironlynx,
cara você ja fez algum grafico misto como um grafico de barras e linhas junto???
cara ja procurei um monte sobre isso… mas n encontrei nenhum exemplo…
tem como passar isso por email por msn por qualquer forma???

abraço.

Procure na Internet uma classe chamada OverlaidXYPlotDemo1 e outra chamada OverlaidXYPlotDemo2.

ola tingol,
valeu pela dica, vou pesquizar ver c encontro algo,

Viu Rogério_barros…
tem um link q pode t ajudar

http://rfiume.blogspot.com/2007/01/adicionando-uma-biblioteca-ao-classpath.html

da uma olhada ai… ali mostra como adicionar o jfreechart no Netbeans

Cara,
da uma olhada no site:
http://www.java2s.com/Code/Java/Chart/CatalogChart.htm
lá tem muitos exemplos, inclusive do gráfico barra e linha. Eu já usei esse exemplo e esta ok.

O link abaixo já direciona direto para este exemplo:
http://www.java2s.com/Code/Java/Chart/JFreeChartDualAxisDemo4.htm

Ps: Se puder me ajudar, gostaria de saber como colocar label nas barras e nos pontos do linha.

Valeu.

[quote]cara você ja fez algum grafico misto como um grafico de barras e linhas junto???
cara ja procurei um monte sobre isso… mas n encontrei nenhum exemplo…
tem como passar isso por email por msn por qualquer forma??? [/quote]
Não, nunca fiz… os que eu fiz até hoje forma Barras e Pizzas(PieCharts).
Nunca precisei de um Line chart, mas em algum lugar eu vi algo parecido… se achar posto aqui.
Vou dar uma modificada no Interval BarChart(Tá com nome da emp que eu presto serviço, e amanhã eu posto aqui).

Como falei, aí vai o código para muntar uma IntervalBarChart:

public class Interval
{
    // low Limit (value unit)
    private double lowLimit = 0; 
    // high Limit (value unit)
    private double highLimit = 0;
    // max value, no computed value above this
    private double maxValue = 0;
    
    // separator size (soemwhat pixel) 
    private int sepSize = 10; 

    public Interval( double low, double high, double max, int size )
    {
        lowLimit = low;
        highLimit = high;
        maxValue = max;
        sepSize = size;
    }

    /**
     * @return Returns the highLimit.
     */
    public double getHighLimit()
    {
        return highLimit;
    }
    /**
     * @param highLimit The highLimit to set.
     */
    public void setHighLimit(double highLimit)
    {
        this.highLimit = highLimit;
    }
    /**
     * @return Returns the lowLimit.
     */
    public double getLowLimit()
    {
        return lowLimit;
    }
    /**
     * @param lowLimit The lowLimit to set.
     */
    public void setLowLimit(double lowLimit)
    {
        this.lowLimit = lowLimit;
    }
    /**
     * @return Returns the maxValue.
     */
    public double getMaxValue()
    {
        return maxValue;
    }
    /**
     * @param maxValue The maxValue to set.
     */
    public void setMaxValue(double maxValue)
    {
        this.maxValue = maxValue;
    }
    /**
     * @return Returns the sepSize.
     */
    public int getSepSize()
    {
        return sepSize;
    }
    /**
     * @param sepSize The sepSize to set.
     */
    public void setSepSize(int sepSize)
    {
        this.sepSize = sepSize;
    }
    
    public double computeValue( double value )
    {
        // to be overidden to compute adjusted values
        if (value &gt maxValue) return maxValue;
        return value;
    }

    public boolean isAboveLow( double value )
    {
        // return true is computed value &gt high limit
        return ( lowLimit &gt 0 && highLimit &gt 0&& value &gt lowLimit );
    }
    public boolean isAboveHigh( double value )
    {
        // return true is computed value &gt high limit
        return ( lowLimit &gt 0 && highLimit &gt 0&& value &gt highLimit );
    }

    /**
     * @return Returns the maxValue.
     */
    public double getMaxComputed()
    {
        return computeValue(maxValue);
    }

}
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.util.Iterator;
import java.util.List;

import org.jfree.chart.axis.AxisState;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueTick;
import org.jfree.text.TextUtilities;
import org.jfree.ui.RectangleEdge;

public class IntervalAxis extends NumberAxis
{
//  handling interval         
    
    Interval interval = null;
    
    public IntervalAxis(String label, Interval interval )
    {
        super(label);
        this.interval = interval;
    }
//  handling interval         
    
    /**
     * Draws the axis line, tick marks and tick mark labels.
     * 
     * @param g2  the graphics device.
     * @param cursor  the cursor.
     * @param plotArea  the plot area.
     * @param dataArea  the data area.
     * @param edge  the edge that the axis is aligned with.
     * 
     * @return The width or height used to draw the axis.
     */
    protected AxisState drawTickMarksAndLabels(Graphics2D g2, 
                                               double cursor,
                                               Rectangle2D plotArea,
                                               Rectangle2D dataArea, 
                                               RectangleEdge edge) {
                                              
        AxisState state = new AxisState(cursor);

        if (isAxisLineVisible()) {
            drawAxisLine(g2, cursor, dataArea, edge);
        }

        double ol = getTickMarkOutsideLength();
        double il = getTickMarkInsideLength();

        List ticks = refreshTicks(g2, state, dataArea, edge);
        state.setTicks(ticks);
        g2.setFont(getTickLabelFont());
        Iterator iterator = ticks.iterator();
        while (iterator.hasNext()) 
        {
//          handling interval         
            ValueTick tick = (ValueTick) iterator.next();
            if (isTickLabelsVisible()) 
            {
                // to stop drawing labels above low limit
                boolean draw = !( interval != null && interval.isAboveLow( tick.getValue() ) );
                // to draw the max valuer on the last tick
                boolean last = ( interval != null && !iterator.hasNext());
                if (draw)
                {
	                g2.setPaint(getTickLabelPaint());
	                float[] anchorPoint = calculateAnchorPoint(
	                    tick, cursor, dataArea, edge
	                );
	                TextUtilities.drawRotatedString(
	                    tick.getText(), g2, 
	                    anchorPoint[0], anchorPoint[1],
	                    tick.getTextAnchor(), 
	                    tick.getAngle(),
	                    tick.getRotationAnchor()
	                );
                }
                else if (last)
                {
	                g2.setPaint(getTickLabelPaint());
	                float[] anchorPoint = calculateAnchorPoint(
	                    tick, cursor, dataArea, edge
	                );
	                TextUtilities.drawRotatedString(
	                    getTickUnit().valueToString(interval.getMaxValue()), g2, 
	                    anchorPoint[0], anchorPoint[1],
	                    tick.getTextAnchor(), 
	                    tick.getAngle(),
	                    tick.getRotationAnchor()
	                );
                }
            }
//          handling interval         

            if (isTickMarksVisible()) {
                float xx = (float) valueToJava2D(
                    tick.getValue(), dataArea, edge
                );
                Line2D mark = null;
                g2.setStroke(getTickMarkStroke());
                g2.setPaint(getTickMarkPaint());
                if (edge == RectangleEdge.LEFT) {
                    mark = new Line2D.Double(cursor - ol, xx, cursor + il, xx);
                }
                else if (edge == RectangleEdge.RIGHT) {
                    mark = new Line2D.Double(cursor + ol, xx, cursor - il, xx);
                }
                else if (edge == RectangleEdge.TOP) {
                    mark = new Line2D.Double(xx, cursor - ol, xx, cursor + il);
                }
                else if (edge == RectangleEdge.BOTTOM) {
                    mark = new Line2D.Double(xx, cursor + ol, xx, cursor - il);
                }
                g2.draw(mark);
            }
        }
        
        // need to work out the space used by the tick labels...
        // so we can update the cursor...
        double used = 0.0;
        if (isTickLabelsVisible()) {
            if (edge == RectangleEdge.LEFT) {
                used += findMaximumTickLabelWidth(
                    ticks, g2, plotArea, isVerticalTickLabels()
                );  
                state.cursorLeft(used);      
            }
            else if (edge == RectangleEdge.RIGHT) {
                used = findMaximumTickLabelWidth(
                    ticks, g2, plotArea, isVerticalTickLabels()
                );
                state.cursorRight(used);      
            }
            else if (edge == RectangleEdge.TOP) {
                used = findMaximumTickLabelHeight(
                    ticks, g2, plotArea, isVerticalTickLabels()
                );
                state.cursorUp(used);
            }
            else if (edge == RectangleEdge.BOTTOM) {
                used = findMaximumTickLabelHeight(
                    ticks, g2, plotArea, isVerticalTickLabels()
                );
                state.cursorDown(used);
            }
        }
       
        return state;
    }

}
public class MyInterval extends Interval
{

    public MyInterval( double low, double high, double max, int size)
    {
        super(low, high, max, size);
    }
    public double computeValue(double value)
    {
        // 3200 4200 7000 28000
        double ret = value;
        if ( value &gt getLowLimit() )
        {
            if (value &lt getHighLimit() )
            {
                // truncate
                //ret = getLowLimit();
            }
            else // &gt highLimit
            {
                // convert to good range
                double delta = getHighLimit() - getLowLimit(); 
                // pour 3200 =&gt 2300
                // 4200 =&gt 2500
                // 7000 =&gt 2700
                // 28000 =&gt 3500
                if (value &lt 4000)
                {
                    ret = 2300;
                }
                else if (value &lt 5000)
                {
                    ret = 2500;
                }
                else if (value &lt 8000)
                {
                    ret = 2700;
                }
                else if (value &lt 30000)
                {
                    ret = 3500;
                }
                else
                {
                    ret = 4000;
                }
            }
        }
        return Math.min(ret,getMaxValue());
    }
}
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Stroke;
import java.awt.geom.Rectangle2D;

import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.EntityCollection;
import org.jfree.chart.labels.CategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.CategoryItemRendererState;
import org.jfree.data.category.CategoryDataset;
import org.jfree.ui.GradientPaintTransformer;
import org.jfree.ui.RectangleEdge;

public class IntervalBarRenderer extends org.jfree.chart.renderer.category.BarRenderer
{
//  handling interval         
    Interval interval = null;
    
    public IntervalBarRenderer( Interval interval )
    {
        super();
        this.interval = interval;
    }
//  handling interval         
    
    /**
     * Draws the bar for a single (series, category) data item.
     *
     * @param g2  the graphics device.
     * @param state  the renderer state.
     * @param dataArea  the data area.
     * @param plot  the plot.
     * @param domainAxis  the domain axis.
     * @param rangeAxis  the range axis.
     * @param dataset  the dataset.
     * @param row  the row index (zero-based).
     * @param column  the column index (zero-based).
     * @param pass  the pass index.
     */
    public void drawItem(Graphics2D g2,
                         CategoryItemRendererState state,
                         Rectangle2D dataArea,
                         CategoryPlot plot,
                         CategoryAxis domainAxis,
                         ValueAxis rangeAxis,
                         CategoryDataset dataset,
                         int row,
                         int column,
                         int pass) {

        // nothing is drawn for null values...
        Number dataValue = dataset.getValue(row, column);
        if (dataValue == null) {
            return;
        }
        double value = dataValue.doubleValue();

//      handling interval         
        boolean drawSeparator = false;
        if (interval != null)
        {
            drawSeparator = interval.isAboveHigh(value);
            value = interval.computeValue(value);
        }
//      handling interval
        
        PlotOrientation orientation = plot.getOrientation();
        double barW0 = calculateBarW0(plot, orientation, dataArea, domainAxis, 
                state, row, column);
        double[] barL0L1 = calculateBarL0L1(value);
        if (barL0L1 == null) {
            return;  // the bar is not visible
        }
        
        RectangleEdge edge = plot.getRangeAxisEdge();
        double transL0 = rangeAxis.valueToJava2D(barL0L1[0], dataArea, edge);
        double transL1 = rangeAxis.valueToJava2D(barL0L1[1], dataArea, edge);
        double barL0 = Math.min(transL0, transL1);
        double barLength = Math.max(Math.abs(transL1 - transL0), 
                getMinimumBarLength());

        // draw the bar...
        Rectangle2D bar = null;
        if (orientation == PlotOrientation.HORIZONTAL) 
        {
            bar = new Rectangle2D.Double(barL0, barW0, barLength,state.getBarWidth());
        }
        else 
        {
            bar = new Rectangle2D.Double(barW0, barL0, state.getBarWidth(),barLength);
        }
        
        Paint itemPaint = getItemPaint(row, column);
        GradientPaintTransformer t = getGradientPaintTransformer();
        if (t != null && itemPaint instanceof GradientPaint) {
            itemPaint = t.transform((GradientPaint) itemPaint, bar);
        }
        g2.setPaint(itemPaint);
        g2.fill(bar);

//      handling interval         
        if (drawSeparator)
        {
            // interval cannot be not null here !!
            barL0 = rangeAxis.valueToJava2D(interval.getLowLimit(), dataArea, edge) - interval.getSepSize();
            barLength = interval.getSepSize();
            Rectangle2D sepBar = null;
            // draw a blank bar meaning separator
            if (orientation == PlotOrientation.HORIZONTAL) 
            {
                sepBar = new Rectangle2D.Double(barL0, barW0, barLength, state.getBarWidth());
            }
            else 
            {
                sepBar = new Rectangle2D.Double(barW0, barL0, state.getBarWidth(), barLength);
            }
            g2.setPaint(plot.getBackgroundPaint());
            g2.fill(sepBar);
        }
//      handling interval         
        
        // draw the outline...
        if (isDrawBarOutline() 
                && state.getBarWidth() &gt BAR_OUTLINE_WIDTH_THRESHOLD) {
            Stroke stroke = getItemOutlineStroke(row, column);
            Paint paint = getItemOutlinePaint(row, column);
            if (stroke != null && paint != null) {
                g2.setStroke(stroke);
                g2.setPaint(paint);
                g2.draw(bar);
            }
        }

        CategoryItemLabelGenerator generator 
            = getItemLabelGenerator(row, column);
        if (generator != null && isItemLabelVisible(row, column)) {
            drawItemLabel(g2, dataset, row, column, plot, generator, bar, 
                    (value &lt 0.0));
        }        

        // add an item entity, if this information is being collected
        EntityCollection entities = state.getEntityCollection();
        if (entities != null) {
            addItemEntity(entities, dataset, row, column, bar);
        }

    }
    
}

Ah, e não podendo esqueçer, uma classe de testes(fica um pouco bagunçado pq essa tem 76 barras), dá para melhorar muito se acertar os detalhes e as cores dos markers:

[code]
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.text.DecimalFormat;
import java.text.NumberFormat;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.CategoryItemLabelGenerator;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.Marker;
import org.jfree.chart.plot.ValueMarker;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleAnchor;
import org.jfree.ui.RefineryUtilities;
import org.jfree.ui.TextAnchor;

/**
*
*

  • @author David Gilbert modified by Ironlynx with Special Thanks To PMassollier
    */
    public class Test extends ApplicationFrame
    {

    /**

    • Creates a new demo instance.

    • @param title the frame title.
      */
      public Test(String title)
      {
      super(title);

      JFreeChart chart = createChart(createDataset());

      // add the chart to a panel…
      ChartPanel chartPanel = new ChartPanel(chart);
      chartPanel.setPreferredSize(new java.awt.Dimension(1000, 750));
      setContentPane(chartPanel);

    }

    /**

    • Starting point for the demonstration application.

    • @param args ignored.
      */
      public static void main(String[] args) {

      Test demo = new Test(“Chart Test”);
      demo.pack();
      RefineryUtilities.centerFrameOnScreen(demo);
      demo.setVisible(true);
      }

    private static CategoryDataset createDataset()
    {
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    dataset.addValue(255.0, “Series 1”, “Empresa 1”);
    dataset.addValue(269.0, “Series 1”, “Empresa 2”);
    dataset.addValue(278.0, “Series 1”, “Empresa 3”);
    dataset.addValue(310.0, “Series 1”, “Empresa 4”);
    dataset.addValue(325.0, “Series 1”, “Empresa 5”);
    dataset.addValue(346.0, “Series 1”, “Empresa 6”);
    dataset.addValue(367.0, “Series 1”, “Empresa 7”);
    dataset.addValue(400.0, “Series 1”, “Empresa 8”);
    dataset.addValue(400.0, “Series 1”, “Empresa 9”);
    dataset.addValue(410.0, “Series 1”, “Empresa 10”);
    dataset.addValue(411.0, “Series 1”, “Empresa 11”);
    dataset.addValue(413.0, “Series 1”, “Empresa 12”);
    dataset.addValue(459.0, “Series 1”, “Empresa 13”);
    dataset.addValue(499.0, “Series 1”, “Empresa 14”);
    dataset.addValue(530.0, “Series 1”, “Empresa 15”);
    dataset.addValue(570.0, “Series 1”, “Empresa 16”);
    dataset.addValue(611.0, “Series 1”, “Empresa 17”);
    dataset.addValue(620.0, “Series 1”, “Empresa 18”);
    dataset.addValue(621.0, “Series 1”, “Empresa 19”);
    dataset.addValue(615.0, “Series 1”, “Empresa 20”);
    dataset.addValue(631.0, “Series 1”, “Empresa 21”);
    dataset.addValue(647.0, “Series 1”, “Empresa 22”);
    dataset.addValue(659.0, “Series 1”, “Empresa 23”);
    dataset.addValue(713.0, “Series 1”, “Empresa 24”);
    dataset.addValue(737.5, “Series 1”, “Empresa 25”);
    dataset.addValue(761.0, “Series 1”, “Empresa 26”);
    dataset.addValue(767.0, “Series 1”, “Empresa 27”);
    dataset.addValue(784.0, “Series 1”, “Empresa 28”);
    dataset.addValue(788.0, “Series 1”, “Empresa 29”);
    dataset.addValue(789.0, “Series 1”, “Empresa 30”);
    dataset.addValue(791.0, “Series 1”, “Empresa 31”);
    dataset.addValue(812.0, “Series 1”, “Empresa 32”);
    dataset.addValue(815.0, “Series 1”, “Empresa 33”);
    dataset.addValue(816.0, “Series 1”, “Empresa 34”);
    dataset.addValue(824.0, “Series 1”, “Empresa 35”);
    dataset.addValue(844.0, “Series 1”, “Empresa 36”);

     dataset.addValue(905.0, "Series 1", "Empresa 37");
     dataset.addValue(913.0, "Series 1", "Empresa 38");
     dataset.addValue(915.0, "Series 1", "Empresa 39");
     dataset.addValue(915.0, "Series 1", "Empresa 40");
     dataset.addValue(922.0, "Series 1", "Empresa 41");
     dataset.addValue(931.0, "Series 1", "Empresa 42");
     
     dataset.addValue(943.0, "Series 1", "Empresa 43");
     dataset.addValue(972.0, "Series 1", "Empresa 44");
     dataset.addValue(982.0, "Series 1", "Empresa 45");
     dataset.addValue(991.0, "Series 1", "Empresa 46");
     dataset.addValue(995.0, "Series 1", "Empresa 47");
     
     dataset.addValue(1019.0, "Series 1", "Empresa 48");
     dataset.addValue(1020.0, "Series 1", "Empresa 49");
     dataset.addValue(1025.0, "Series 1", "Empresa 50");
     dataset.addValue(1029.0, "Series 1", "Empresa 51");
     dataset.addValue(1032.0, "Series 1", "Empresa 52");
     dataset.addValue(1042.0, "Series 1", "Empresa 53");
     dataset.addValue(1043.0, "Series 1", "Empresa 54");
     dataset.addValue(1059.0, "Series 1", "Empresa 55");
     dataset.addValue(1065.0, "Series 1", "Empresa 56");
     dataset.addValue(1072.0, "Series 1", "Empresa 57");
     dataset.addValue(1107.0, "Series 1", "Empresa 58");
     dataset.addValue(1107.0, "Series 1", "Empresa 59");
     dataset.addValue(1111.0, "Series 1", "Empresa 60");
     dataset.addValue(1120.0, "Series 1", "Empresa 61");
     dataset.addValue(1127.0, "Series 1", "Empresa 62");
     dataset.addValue(1129.0, "Series 1", "Empresa 63");
     dataset.addValue(1190.0, "Series 1", "Empresa 64");	
     dataset.addValue(1229.0, "Series 1", "Empresa 65");
     dataset.addValue(1239.0, "Series 1", "Empresa 66");	
     dataset.addValue(1246.0, "Series 1", "Empresa 67");
     dataset.addValue(1249.0, "Series 1", "Empresa 68");
     dataset.addValue(1258.0, "Series 1", "Empresa 69");
     dataset.addValue(1265.0, "Series 1", "Empresa 70");
     dataset.addValue(1281.0, "Series 1", "Empresa 71");
     dataset.addValue(1890.0, "Series 1", "Empresa 72");
     dataset.addValue(3252.0, "Series 1", "Empresa 73");
     dataset.addValue(4234.0, "Series 1", "Empresa 74");
     dataset.addValue(7019.0, "Series 1", "Empresa 75");
     dataset.addValue(28047.0, "Series 1","Empresa 76");
    
     return dataset; 
    

    }

    private static JFreeChart createChart(CategoryDataset dataSet)
    {
    CategoryAxis categoryAxis = new CategoryAxis(“Category”);
    categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);

     Interval interval = new MyInterval(2000, 3000, 30000, 10);
     IntervalBarRenderer renderer = new IntervalBarRenderer( interval );
    
     IntervalAxis valueAxis = new IntervalAxis("Valor", interval);
     valueAxis.setRange(0,interval.getMaxComputed());
     valueAxis.setTickUnit(new NumberTickUnit(500,new DecimalFormat("0")));
    
     CategoryPlot plot = new CategoryPlot( dataSet, categoryAxis, valueAxis, renderer );
     plot.setBackgroundPaint(Color.lightGray); 
     plot.setDomainGridlinePaint(Color.white); 
     plot.setRangeGridlinePaint(Color.white); 
    
    Marker marker = new ValueMarker(103.0); 
      marker.setLabel("1ºQuartil-21 Mediana-103");
      marker.setStroke(new BasicStroke(2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
              1.0f, new float[] { 10.0f, 6.0f }, 0.0f));
      marker.setLabelFont(new Font("SansSerif", Font.ITALIC, 11));
      marker.setLabelAnchor(RectangleAnchor.LEFT);
      marker.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
      marker.setPaint(Color.blue);  
      plot.addRangeMarker(marker);
      
      Marker marker2 = new ValueMarker(325.0); 
      marker2.setLabel("3ºQuartil-320");
      marker2.setStroke(new BasicStroke(2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
              1.0f, new float[] { 10.0f, 6.0f }, 0.0f));
      marker2.setLabelFont(new Font("SansSerif", Font.ITALIC, 11));
      marker2.setLabelAnchor(RectangleAnchor.LEFT);
      marker2.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
      marker2.setPaint(Color.red);  
      plot.addRangeMarker(marker2);  
      
      Marker marker3 = new ValueMarker(522.0); 
      marker3.setLabel("Mediana do Setor-522");
      //marker2.
      marker3.setLabelFont(new Font("SansSerif", Font.ITALIC, 11));
      marker3.setLabelAnchor(RectangleAnchor.LEFT);
      marker3.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
      marker3.setPaint(Color.red); 
      plot.addRangeMarker(marker3);
      
      Marker marker4 = new ValueMarker(769.0); 
      marker4.setLabel("Cerca Superior-769");
      marker4.setStroke(new BasicStroke(2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
              1.0f, new float[] { 10.0f, 6.0f }, 0.0f));
      marker4.setLabelFont(new Font("SansSerif", Font.ITALIC, 11));
      marker4.setLabelAnchor(RectangleAnchor.LEFT);
      marker4.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
      marker4.setPaint(Color.PINK);  
      plot.addRangeMarker(marker4);
    
     CategoryItemLabelGenerator generator = new StandardCategoryItemLabelGenerator("{2}", NumberFormat.getInstance()); 
     renderer.setItemLabelGenerator(generator);
     renderer.setItemLabelFont(new Font("SansSerif", Font.PLAIN, 8));
     renderer.setItemLabelsVisible(true); 
       ItemLabelPosition labelPos = new ItemLabelPosition( ItemLabelAnchor.OUTSIDE12,
     		  TextAnchor.BOTTOM_LEFT, TextAnchor.BOTTOM_LEFT, -Math.PI / 2 );
       renderer.setSeriesPositiveItemLabelPosition( 0, labelPos );
     JFreeChart chart = new JFreeChart( "Participação no mercado", JFreeChart.DEFAULT_TITLE_FONT, plot, true );
     chart.setBackgroundPaint(Color.white); 
     
     return chart; 
    

    }

} [/code]