Linha tracejada no JFreeChart

Alguém poderia me ajudar me dizendo como eu faço para uma linha do meu gráfico ficar tracejada usando JFreeChart.

Obrigado

Bruno Moura

Pega o plot do seu chart e altera a propriedade.

Tudo bem … mas eu não estou conseguindo encontrar qual propriedade seria esta do plot.

obrigado novamente

Vê se isso ajuda:

JFreeChart jfreechart = ChartFactory.create.... CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot(); LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer(); lineandshaperenderer.setShapesVisible(true); lineandshaperenderer.setDrawOutlines(true); lineandshaperenderer.setUseFillPaint(true); lineandshaperenderer.setFillPaint(Color.white);

Ocorreram alguns problemas.
O fato é que eu estpu extendendo o IReport para aceitar gráficos timeseries.
Até agora deu tudo certo e a última coisa que eu queria é que uma das linhas ficasse tracejada.
Tentei utilizar as dicas que me passou, mas da uma ClassCast Exception
na linha CategoryPlot categoryplot = (CategoryPlot)chart.getPlot();

passo meu código:

JFreeChart chart = org.jfree.chart.ChartFactory.createTimeSeriesChart("Title", 
                    Misc.nvl(props.getProperty("categoryLabel"),""),
                    Misc.nvl(props.getProperty("valueLabel"),""),
                    dataset,                   
                    showLegend,                    // include legend
                    showTooltips,                     // tooltips?
                    false                     // URLs?
                    );

                       
            CategoryPlot categoryplot = (CategoryPlot)chart.getPlot();
            LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();
            lineandshaperenderer.setShapesVisible(true);
            lineandshaperenderer.setDrawLines(true);
            lineandshaperenderer.setUseFillPaintForShapeOutline(true);
           lineandshaperenderer.setFillPaint(Color.white);

obrigado pela atenção

Você está usando Time series e não category. Use o plot correspondente.

O plot corresponde que eu uso para instanciar outros renderes é o XYPlot,
mas quando tento:

LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)xyPlot.getRenderer();
também ocorre ClassCastException, não com qual classe devo instanciar o render para poder mudar as propriedades da linha de um timeseries…

obrigado mesmo

Eu apenas coloquei o exemplo que vem no DEMO do JFreeChart, que é um gráfico de linhas tracejadas, pro categoria.

Era só pra vc ter uma idéia do que se passa.

Descubra as classes que você está manipulando e veja se tem algo do tipo.

Boa sorte.

acabei conseguindo.
obrigado pela ajuda.

vou posta o código, para que se alguém estiver com o mesmo problema, ter uma ajuda.

XYItemRenderer renderer = cplot.getRenderer();
            if (renderer instanceof StandardXYItemRenderer) {
                StandardXYItemRenderer rr = (StandardXYItemRenderer) renderer;
                rr.setPlotShapes(false);
                // Formata a espessura da linha
                rr.setSeriesStroke(0,new BasicStroke(2));
                rr.setSeriesStroke(1,new BasicStroke(2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                        1.0f, new float[] { 10.0f, 6.0f }, 0.0f));
            }

Parabéns e obrigado!

Engraçado, tô tentando fazer uma linha tracejada no meu gráfico, mas se eu usar esse trecho que o Daniel passou:

 CategoryPlot categoryplot = (CategoryPlot)chart.getPlot();
             LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();
             lineandshaperenderer.setShapesVisible(true);
             lineandshaperenderer.setDrawLines(true);
             lineandshaperenderer.setUseFillPaintForShapeOutline(true);
            lineandshaperenderer.setFillPaint(Color.white);

O meu gráfico todo fica em branco!Alguém mais já fez isso(linha tracejada pelo gráfico) com JFreeChart?

Obs.: gráfico de barras(2D mesmo) na vertical.

bbmoura,
com esse código que vc postou vc deixou a linha tracejada, ou apenas mudou a espessura dela?Tou usando um Marker em BarChart mas não consigo tracejar a linha de nenhuma forma! :roll:

Ai,Iron! O animal aqui tava usando um método que não existia…
Bom para setar num Marker uma linha tracejada é só usar setStroke.É quase igual com o exemplo do bbmoura:

seuMarker.setStroke(new java.awt.BasicStroke(2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                         1.0f, new float[] { 10.0f, 6.0f }, 0.0f));

ai galera gostaria de saber como fasso para mudar o o valor do eixo y do grafico em jfreechart, ou seja, colocaro o minimo de 0 ao maximo de 24. Como devo proceder?

Que eu me lembre, não tem como fazer isso…talvez tu possa até sugerir, mas limitar parece que não…posso estar enganado.

Sou iniciante em jfreechart. Encontrei esta classe para customizar, mas não entendi e não funciona na minha aplicação web, pois da erro quando chega na ActegoryPlot.

public class Barras3D implements JRChartCustomizer{

public void customize(JFreeChart chart, JRChart jasperChart){

	CategoryPlot plot = (CategoryPlot)chart.getPlot();
	
	// Seta o range do eixo Y de 0 a 24 (e somente numeros inteiros)  
    NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();  

// NumberAxis rangeAxis = new NumberAxis();
rangeAxis.setRange(0, 24);
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

	// Seta a quantidade de linhas para quebra da label    
	   plot.getDomainAxis().setMaximumCategoryLabelLines(24);  
	          
	//Seta a Fonte/tamanho das labels:  Tamanho 5, SansSerif  
	CategoryItemRenderer renderer = plot.getRenderer();  
	renderer.setBaseItemLabelFont(new Font("SansSerif", Font.PLAIN, 5));  

}
}

Sou iniciante em jfreechart. Encontrei esta classe para customizar, mas não entendi e não funciona na minha aplicação web, pois da erro quando chega na ActegoryPlot.

public class Barras3D implements JRChartCustomizer{

public void customize(JFreeChart chart, JRChart jasperChart){

CategoryPlot plot = (CategoryPlot)chart.getPlot();

// Seta o range do eixo Y de 0 a 24 (e somente numeros inteiros)
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
// NumberAxis rangeAxis = new NumberAxis();
rangeAxis.setRange(0, 24);
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

// Seta a quantidade de linhas para quebra da label
plot.getDomainAxis().setMaximumCategoryLabelLines(24);

//Seta a Fonte/tamanho das labels: Tamanho 5, SansSerif
CategoryItemRenderer renderer = plot.getRenderer();
renderer.setBaseItemLabelFont(new Font(“SansSerif”, Font.PLAIN, 5));
}
}

Pode ser útil ainda hoje…

CategoryPlot plot = chart.getCategoryPlot();
        CategoryItemRenderer itemRerender = plot.getRenderer();
        itemRerender.setSeriesPaint(0, Color.GREEN);//coloca cor na barra
        itemRerender.setSeriesPaint(1, Color.BLUE);
        itemRerender.setSeriesPaint(2, Color.YELLOW);
        ValueAxis eixoY = plot.getRangeAxis();
        eixoY.setRange(0, 110);// define o valor minimo e máximo do eixo y
        ValueMarker valueMarker = new ValueMarker(meta, Color.red, new BasicStroke(2.0f, BasicStroke.CAP_SQUARE, BasicStroke.CAP_SQUARE, 1.0f, new float[]{6.0f, 6.0f}, 2.0f));// criar linha tracejada de meta. Para não tracejada, edite o Basic stroke +- assim new BasicStroke(2)
        plot.addRangeMarker(valueMarker);//adiciona  ao plot a linha
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setAutoRange(false);// marcação de valores no eixo y não automatico
        rangeAxis.setTickUnit(new NumberTickUnit(10));// distancia entre marcações
        itemRerender.setItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}", new DecimalFormat("0.00")));//colocar o valor da barra sobre a barra  
        itemRerender.setItemLabelsVisible(true);