Ola pessoal… estou utilizando a biblioteca JFreeChart e estou precisando criar um grafico de barras com legenda. O problema, eh que eu nao consigo alterar a cor de cada barra, apenas de todas ao mesmo tempo. Eh como se ele reconhecesse o dataset como sendo a mesma categoria e a legenda fica unica tambem.
Alguem jah teve o mesmo problema??? Ou nao fui claro? hehe
Abracos…
[quote] private void CreateBarChart(String[] campos, String[] valores,
String titulo, int orientacao, String x, String y,HashMap cores) {
String Cores =(String) cores.get("Cores");
String [] coresSplited = Cores.split(";");
Color [] ObjetosCores = new Color[coresSplited.length];
String corHexa = "";
for(int i = 0; i < coresSplited.length; i++)
{
if (coresSplited[i].toString().indexOf("#")>-1)
{
corHexa = coresSplited[i].toString();
ObjetosCores[i] = converteRGB(corHexa);
} else {
String corSplit1 = coresSplited[i].replace("RGB(","");
corSplit1 = corSplit1.replace(")","");
String[] corSplit3 = corSplit1.split(",");
ObjetosCores[i] = new Color(Integer.parseInt(corSplit3[0]),Integer.parseInt(corSplit3[1]),Integer.parseInt(corSplit3[2]));
}
}
int qntLinhas = 0;
try {
for (int i = 0; i < valores.length; i++) {
dataset.addValue(Double.parseDouble(valores[i].replace(",",".")),"(" + valores[i].toString().replace(",",".") +")" + campos[i], Integer.toString(i+1) ); //Adiciona os valores no category para gerar as barras
qntLinhas++;
}
//Gera o gráfico
if (orientacao == 1) //Valida a Orientação -- horizontal ou vertical
{
chart = ChartFactory.createBarChart(titulo, x, y, dataset,
PlotOrientation.HORIZONTAL, true, true, true); //Gera o gráfico de barra
} else {
chart = ChartFactory.createBarChart(titulo, x, y, dataset,
PlotOrientation.VERTICAL, true, true, true);
}
CategoryPlot plot = chart.getCategoryPlot(); //Pega o plot para pintar as barras
BarRenderer renderer = (BarRenderer) plot.getRenderer();
renderer.setDrawBarOutline(true); //Desenha a linha externa nas barras (bordas das barras)
for (int i = 0; i <= qntLinhas; i++)
{
renderer.setSeriesPaint(i,
new GradientPaint(0.0f, 0.0f,ObjetosCores[i], 0.0f, 0.0f,
Color.lightGray)); //Pinta no degradê q eu quero.
}
} catch (Exception e) {
System.out.println("Erro: " + e.getMessage());
}
}
qualquer duvida me fala que eu te ajudo
Explicando o codigo, eu chamo esse metodo passando todos os parametros necessarios para sua construção mais um hashmap de cores, como recupero as cores de acordo com oq o usuario escolhe em tempo de execução, o codigo espera tanto uma cor rgb como hexadecimal.
Depois de definir o dataset crio esse CategoryPlot, que me serve exatamente para personalizar as barras, de acordo com o numero de barras que eu tenho, a quantidade de cores para cada uma tem que ser a mesma…eu pinto as barras com estilo degrade…
Se o pessoal do forum quiser posso elaborar um tutorial sobre JFreeChart, estudei essa biblioteca pra faze graficos Bar, Meter, Polar e Pizza
Gostaria de saber se vc sabe como faço pra colocar números (legenda) em cima das barras.
Já tentei utilizando a classe DefaultStatisticalCategoryDataset mas ainda não consegui.
Se alguém puder ajudar agradeço.
Maurício Pettinate.
têm essas duas formas:
renderer.setSeriesItemLabelsVisible(0, Boolean.TRUE);
renderer.setItemLabelsVisible(true);
a segunda é um método depreciado.
Obrigado Fernando, mas mesmo assim ainda não funcionou… 
Veja como está meu método:
public void mudaCorBarra(JFreeChart chart) {
CategoryPlot plot = (CategoryPlot) chart.getPlot();
BarRenderer rend = (BarRenderer) plot.getRenderer();
rend.setSeriesPaint(0, (Paint) Constantes.CORES_GRAFICOS.get("azulAco")); // azul aço
rend.setSeriesPaint(1, (Paint) Constantes.CORES_GRAFICOS.get("branco") ); // branco
rend.setSeriesPaint(2, (Paint) Constantes.CORES_GRAFICOS.get("cinzaGray") ); // cinza Gray
rend.setSeriesItemLabelsVisible(0,Boolean.TRUE,true);
rend.setSeriesItemLabelsVisible(1,Boolean.TRUE,true);
rend.setSeriesItemLabelsVisible(2,Boolean.TRUE,true);
rend.setDrawBarOutline(true);
}
Estou fazendo alguma coisa errada?
abs!
Cara,
adiciona essa linha:
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
e vê se funfa aí…
aeeeeee, funcionooou!! Poxa Fernandão, muito obrigado mesmo pela ajuda cara!!
Um problema que vi que estava acontecendo também, é que eu estava trabalhando com a lib jfreechart-0.9.20.jar e
jcommon-0.9.5.jar… para funcionar, tive que atualizar as libs para a jfreechart-1.0.12.jar e jcommon-1.0.15.jar
Trabalhando com as libs antigas, o método fica:
CategoryPlot plot = chart.getCategoryPlot();
StackedBarRenderer renderer = new StackedBarRenderer();
renderer.setItemLabelsVisible(true);
renderer.setSeriesItemLabelsVisible(2,true);
//StandardCategoryLabelGenerator standardCategoryLabelGenerator = new StandardCategoryLabelGenerator(); essa nao funciona na lib antiga
renderer.setBaseLabelGenerator(new StandardCategoryLabelGenerator());
renderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());
plot.setRenderer(renderer);
Depois que tiver deixado o gráfico funcionando perfeitamente aqui, posto para o pessoal que quiser utilizar como exemplo!
Grande abraço,
Maurício Pettinate.