Pessoal alguém sabe como eu faço pra colocar o gráfico de barra atras dos gráficos de linhas?
Estou usando JfreeChart, abaixo meu código que personaliza o gráfico:
//Personalizando os gráficos
private JFreeChart createChartPPM(String criterio) throws SQLException {
Double linhas = 0.0;
Double rnc = 0.0;
Double acc = 0.0;
com.mysql.jdbc.Connection conn = dbConexao.getConnection();
// Consulta SQL para trazer os rs e alimentar o grafíco
String query = "SELECT "
+ "SUBSTRING(Referencia,4,7) AS Referencia "//Mes/Ano
+ "FROM linhasfaturadas "
+ "WHERE Visivel = 1 "
+ "ORDER BY cod ASC ";
// Criando java statement
Statement st = conn.createStatement();
// Executando a query, e trazendo o resultset
ResultSet rs = st.executeQuery(query);
// Setando os rs para o gráfico
DefaultCategoryDataset dataset0 = new DefaultCategoryDataset();
DefaultCategoryDataset dataset1 = new DefaultCategoryDataset();
DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();
if (dataset0 == null || !rs.first()) {
dataset0.addValue(0, "PPM", "Referencia");
} else {
do {
//PPM
dataset0.addValue(Integer.parseUnsignedInt(new DecimalFormat("#0").format((puxaRNCs(rs.getString("Referencia")) / puxaLinhas(rs.getString("Referencia"))) * 1000000)), "PPM", rs.getString("Referencia"));
//PPM Acumulado 1
linhas = (double) (linhas + puxaLinhas(rs.getString("Referencia")));
rnc = (double) (rnc + puxaRNCs(rs.getString("Referencia")));
acc = (rnc / linhas * 1000000);
//PPM Acumulado 2
dataset1.addValue(Integer.parseUnsignedInt(new DecimalFormat("#0").format(acc)), "PPM ACC", rs.getString("Referencia"));
//Target
dataset2.addValue(puxaTargetPPM(), "TARGET", rs.getString("Referencia"));
} while (rs.next());
}
//PPM Mensal - Grafico Barra ===========================================
CategoryItemLabelGenerator generator = new StandardCategoryItemLabelGenerator();
CategoryItemRenderer renderer0 = new BarRenderer();
renderer0.setItemLabelGenerator(generator);
CategoryPlot plot = new CategoryPlot();
plot.setDataset(dataset0);
plot.setRenderer(renderer0);
plot.setDomainAxis(new CategoryAxis(""));
plot.getDomainAxis().setTickLabelsVisible(false);
plot.setRangeAxis(new NumberAxis(""));
plot.setOrientation(PlotOrientation.VERTICAL);
plot.setRangeGridlinesVisible(true);
plot.setDomainGridlinesVisible(true);
//Personalizando as barras do gráfico
BarRenderer bar = (BarRenderer) plot.getRenderer();
bar.setMaximumBarWidth(.06); //seta a largura da barra
bar.setGradientPaintTransformer(null);
bar.setBarPainter(new StandardBarPainter());
bar.setSeriesPaint(0, azul);
bar.setShadowVisible(false);
//Colocando legenda nas barras
renderer0.setItemLabelsVisible(true);//Legenda da barra
bar.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
bar.setBaseItemLabelsVisible(true);
bar.setBaseItemLabelFont(new Font("SansSerif", Font.BOLD, 16));
bar.setBaseItemLabelPaint(new java.awt.Color(255, 255, 255));
bar.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE6, TextAnchor.BOTTOM_CENTER, TextAnchor.BOTTOM_CENTER, 0));
//Personalizando a área de plotagem do gráfico
plot.setBackgroundPaint(new java.awt.Color(221, 221, 221));
plot.setDomainGridlinesVisible(false);
plot.setRangeGridlinesVisible(false);
plot.setOutlineVisible(false);
plot.setNoDataMessage("Aguarde até a proxima hora ou verifique o servidor");
// Formatando o eixo X inferior que contem os meses
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setTickLabelsVisible(true);
domainAxis.setTickLabelFont(new Font("SansSerif", Font.PLAIN, 12));
// Ocultando o eixo Y lateral esquerdo que contem os valores
NumberAxis rangeAxisEsquerdo = (NumberAxis) plot.getRangeAxis();
rangeAxisEsquerdo.setVisible(false);//Ocultando o eixo Y lateral esquerdo que contem os valores
rangeAxisEsquerdo.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxisEsquerdo.setUpperMargin(0.1);
rangeAxisEsquerdo.setTickUnit(new NumberTickUnit(2)); //traça o intervalo entre valores
//PPM ACC - Grafico Linha ==============================================
CategoryItemRenderer renderer1 = new LineAndShapeRenderer();
plot.setDataset(1, dataset1);
plot.setRenderer(1, renderer1);
// create the third dataset and renderer0...
ValueAxis rangeAxis1 = new NumberAxis("");
plot.getRangeAxis().setTickLabelsVisible(false);
plot.setRangeAxis(1, rangeAxis1);//Linha 1 -> Linha 1
//Personalizando as linhas do gráfico
LineAndShapeRenderer lin1 = (LineAndShapeRenderer) plot.getRenderer(1);
lin1.setDrawOutlines(true);
lin1.setUseFillPaint(true);
lin1.setFillPaint(Color.white);
lin1.setSeriesPaint(0, verde);
lin1.setSeriesStroke(0, new BasicStroke(2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 10.0f, new float[]{10.0f, 6.0f}, 0.0f));
lin1.setShapesVisible(true);
lin1.setSeriesShape(0, new Ellipse2D.Double(-3.0, -3.0, 6.0, 6.0));
//Colocando legenda nas linhas
lin1.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
lin1.setBaseItemLabelsVisible(true);
lin1.setBaseItemLabelPaint(new Color(51, 51, 51));
lin1.setBaseItemLabelFont(new Font("SansSerif", Font.BOLD, 16));
lin1.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER));
// Ocultando o eixo Y lateral esquerdo que contem os valores
NumberAxis rangeAxisDireito = (NumberAxis) plot.getRangeAxis(1);
rangeAxisDireito.setVisible(false);//Ocultando o eixo Y lateral esquerdo que contem os valores
rangeAxisDireito.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxisDireito.setUpperMargin(0.1);
rangeAxisDireito.setTickUnit(new NumberTickUnit(1)); //traça o intervalo entre valores
//Target - Grafico Linha ===============================================
plot.setDataset(2, dataset2);
CategoryItemRenderer renderer2 = new LineAndShapeRenderer();
plot.setRenderer(2, renderer2);
plot.mapDatasetToRangeAxis(2, 0);//Linha 2 -> Barra
//Personalizando as linhas do gráfico
LineAndShapeRenderer lin2 = (LineAndShapeRenderer) plot.getRenderer(2);
lin2.setDrawOutlines(true);
lin2.setUseFillPaint(true);
lin2.setFillPaint(Color.white);
lin2.setSeriesPaint(0, vermelho);
//lin2.setSeriesStroke(0, new BasicStroke(2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 10.0f, new float[]{10.0f, 6.0f}, 0.0f));
lin2.setShapesVisible(true);
lin2.setSeriesShape(0, new Ellipse2D.Double(-3.0, -3.0, 6.0, 6.0));
//Colocando legenda nas linhas
lin2.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
lin2.setBaseItemLabelsVisible(true);
lin2.setBaseItemLabelPaint(new Color(240, 128, 128));
lin2.setBaseItemLabelFont(new Font("SansSerif", Font.BOLD, 16));
lin2.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER));
//////////////////////////////////////////////////////////////////////////////////Geral
JFreeChart chart = new JFreeChart(plot);
chart.setBackgroundPaint(new java.awt.Color(221, 221, 221));
//Personalizando a legenda inferior
chart.getLegend().setVisible(false);
chart.getLegend().setFrame(BlockBorder.NONE);
chart.getLegend().setItemFont(new Font("SansSerif", Font.PLAIN, 12));
chart.getLegend().setVerticalAlignment(VerticalAlignment.CENTER);
chart.getLegend().setHorizontalAlignment(HorizontalAlignment.CENTER);
dbConexao.close((com.mysql.jdbc.Connection) conn, st, rs);
return chart;
}
