Example usage for org.jfree.data.category DefaultCategoryDataset getValue

List of usage examples for org.jfree.data.category DefaultCategoryDataset getValue

Introduction

In this page you can find the example usage for org.jfree.data.category DefaultCategoryDataset getValue.

Prototype

@Override
public Number getValue(Comparable rowKey, Comparable columnKey) 

Source Link

Document

Returns the value for a pair of keys.

Usage

From source file:it.eng.spagobi.engines.chart.bo.charttypes.targetcharts.WinLose.java

@Override
public JFreeChart createChart(DatasetMap datasets) {
    logger.debug("IN");
    DefaultCategoryDataset dataset = (DefaultCategoryDataset) datasets.getDatasets().get("1");

    JFreeChart chart = ChartFactory.createBarChart(name, null, null, dataset, PlotOrientation.VERTICAL, legend,
            false, false);//from ww w.java  2s .c o m
    chart.setBorderVisible(false);
    chart.setBackgroundPaint(color);

    TextTitle title = setStyleTitle(name, styleTitle);
    chart.setTitle(title);
    if (subName != null && !subName.equals("")) {
        TextTitle subTitle = setStyleTitle(subName, styleSubTitle);
        chart.addSubtitle(subTitle);
    }

    CategoryPlot plot = chart.getCategoryPlot();
    plot.setOutlineVisible(false);
    plot.setInsets(new RectangleInsets(0.0, 0.0, 0.0, 0.0));
    plot.setBackgroundPaint(color);
    plot.setDomainGridlinesVisible(false);
    plot.setRangeGridlinesVisible(false);
    plot.setRangeCrosshairVisible(true);
    plot.setRangeCrosshairStroke(new BasicStroke(1f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
    plot.setRangeCrosshairPaint(color.BLACK);

    // customize axes 
    CategoryAxis domainAxis = plot.getDomainAxis();
    domainAxis.setVisible(false);
    domainAxis.setCategoryMargin(0.2);

    NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    rangeAxis.setVisible(false);
    rangeAxis.setRange(new Range(-(barHeight + 0.2), (barHeight + 0.2)));

    // customize renderer 
    MyBarRendererThresholdPaint renderer = new MyBarRendererThresholdPaint(useTargets, thresholds, dataset,
            timeSeries, nullValues, bottomThreshold, color);

    if (wlt_mode.doubleValue() == 0) {
        renderer.setBaseItemLabelsVisible(Boolean.FALSE, true);
    } else {
        renderer.setBaseItemLabelsVisible(Boolean.TRUE, true);
        renderer.setBaseItemLabelFont(
                new Font(styleValueLabels.getFontName(), Font.PLAIN, styleValueLabels.getSize()));
        renderer.setBaseItemLabelPaint(styleValueLabels.getColor());
        renderer.setBaseItemLabelGenerator(
                new StandardCategoryItemLabelGenerator("{2}", new DecimalFormat("0.#")) {
                    public String generateLabel(CategoryDataset dataset, int row, int column) {
                        if (dataset.getValue(row, column) == null
                                || dataset.getValue(row, column).doubleValue() == 0)
                            return "";
                        String columnKey = (String) dataset.getColumnKey(column);
                        int separator = columnKey.indexOf('-');
                        String month = columnKey.substring(0, separator);
                        String year = columnKey.substring(separator + 1);
                        int monthNum = Integer.parseInt(month);
                        if (wlt_mode.doubleValue() >= 1 && wlt_mode.doubleValue() <= 4) {
                            if (wlt_mode.doubleValue() == 2 && column % 2 == 0)
                                return "";

                            Calendar calendar = Calendar.getInstance();
                            calendar.set(Calendar.MONTH, monthNum - 1);
                            SimpleDateFormat dataFormat = new SimpleDateFormat("MMM");
                            return dataFormat.format(calendar.getTime());
                        } else
                            return "" + monthNum;
                    }
                });
    }

    if (wlt_mode.doubleValue() == 3) {
        renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,
                org.jfree.ui.TextAnchor.BOTTOM_CENTER, org.jfree.ui.TextAnchor.BOTTOM_RIGHT, Math.PI / 2));
        renderer.setBaseNegativeItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE6,
                org.jfree.ui.TextAnchor.TOP_CENTER, org.jfree.ui.TextAnchor.HALF_ASCENT_LEFT, Math.PI / 2));

    } else if (wlt_mode.doubleValue() == 4 || wlt_mode.doubleValue() == 5) {
        renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,
                org.jfree.ui.TextAnchor.BOTTOM_CENTER, org.jfree.ui.TextAnchor.BOTTOM_RIGHT, Math.PI / 4));
        renderer.setBaseNegativeItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE6,
                org.jfree.ui.TextAnchor.TOP_CENTER, org.jfree.ui.TextAnchor.HALF_ASCENT_LEFT, Math.PI / 4));
    }

    if (legend == true) {
        LegendItemCollection collection = createThresholdLegend(plot);
        plot.setFixedLegendItems(collection);
    }

    if (maxBarWidth != null) {
        renderer.setMaximumBarWidth(maxBarWidth);
    }
    //renderer.setSeriesPaint(0, Color.BLUE); 
    plot.setRenderer(renderer);

    logger.debug("OUT");
    if (mainThreshold == null)
        return null;
    return chart;

}

From source file:org.sakaiproject.sitestats.impl.chart.ChartServiceImpl.java

private AbstractDataset getCategoryDataset(Report report) {
    List<Stat> reportData = report.getReportData();

    // fill dataset
    DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
    String dataSource = report.getReportDefinition().getReportParams().getHowChartSource();
    String categorySource = report.getReportDefinition().getReportParams().getHowChartCategorySource();
    if (StatsManager.T_NONE.equals(categorySource)) {
        categorySource = null;//from   w  w  w .  j  ava 2  s. co m
    }
    if (categorySource == null) {
        // without categories
        Set<Comparable> usedKeys = new HashSet<Comparable>();
        for (Stat s : reportData) {
            Comparable key = getStatValue(s, dataSource);
            if (key != null) {
                if (usedKeys.contains(key)) {
                    dataSet.incrementValue(getTotalValue(s, report).doubleValue(), key, key);
                } else {
                    dataSet.addValue(getTotalValue(s, report), key, key);
                    usedKeys.add(key);
                }
            }
        }

    } else {
        // with categories
        Map<Comparable, Comparable> usedKeys = new HashMap<Comparable, Comparable>();
        for (Stat s : reportData) {
            Comparable key = getStatValue(s, dataSource);
            Comparable cat = getStatValue(s, categorySource);
            if (key != null && cat != null) {
                if (usedKeys.containsKey(cat) && key.equals(usedKeys.get(cat))) {
                    dataSet.incrementValue(getTotalValue(s, report).doubleValue(), key, cat);
                } else {
                    dataSet.addValue(getTotalValue(s, report), key, cat);
                    usedKeys.put(cat, key);
                }
            }
        }
        // fill missing values with zeros
        for (Comparable c : usedKeys.keySet()) {
            for (Comparable k : usedKeys.values()) {
                if (dataSet.getValue(k, c) == null) {
                    dataSet.addValue(0, k, c);
                }
            }
        }
    }

    return dataSet;
}

From source file:atlas.kingj.roi.FrmMain.java

private void UpdateROIEnergy(Machine[] mach) {
    if (RoiData != null && results != null && RoiData.energies.size() >= results.getSize()) { //  TODO first case redundant?
        double powercost = 0.;
        try {//from   w  w w.  j  av a  2 s .  c  om
            powercost = Double.parseDouble(txtenergycost.getText());
        } catch (Exception e) {
            powercost = 0.;
        }

        RoiData.energycost = powercost;

        DefaultCategoryDataset energydata = new DefaultCategoryDataset();
        String series1 = "Energy Costs";
        for (int i = 0; i < results.getSize(); ++i) {
            String name = results.get(i).getModel() + ": " + results.get(i).getName();
            energydata.addValue(
                    RoiData.energies.get(listCompareRoi.getSelectedIndices()[i]).kwhrsperyear * powercost,
                    series1, name);
            RoiResults.get(
                    i).energycost = RoiData.energies.get(listCompareRoi.getSelectedIndices()[i]).kwhrsperyear
                            * powercost;
        }

        // draw graph
        JFreeChart chart = ChartFactory.createBarChart("", "", "Energy Cost ( / year)", energydata,
                PlotOrientation.VERTICAL, false, true, false);
        CategoryPlot cp = chart.getCategoryPlot();
        cp.setBackgroundPaint(new Color(240, 240, 240));
        cp.setRangeGridlinePaint(Color.gray);
        CategoryItemRenderer renderer = new CustomRenderer(
                new Paint[] { new Color(255, 85, 85), new Color(85, 85, 255), new Color(85, 255, 85),
                        new Color(251, 251, 0), new Color(86, 228, 200) });
        cp.setRenderer(renderer);
        BarRenderer b = (BarRenderer) cp.getRenderer();
        b.setBarPainter(new StandardBarPainter());
        renderer.setBaseToolTipGenerator(
                new StandardCategoryToolTipGenerator("{1}, {2}", NumberFormat.getInstance()));

        RoiResults.setEnergyGraph(chart);

        // Display results graph
        try {
            pnlGraphEnergy.remove(lblNoGraph2);
        } catch (Exception e) {
        }
        try {
            pnlGraphEnergy.remove(pnlGraphEnergyInner);
        } catch (Exception e) {
        }
        pnlGraphEnergyInner = new ChartPanel(RoiResults.getEnergyGraph());
        pnlGraphEnergyInner.setBounds(2, 2, 435, 222);
        pnlGraphEnergyInner.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
                if (e.getButton() == MouseEvent.BUTTON1 && pnlGraphEnergyInner.contains(e.getPoint())
                        && RoiResults != null && RoiResults.getEnergyGraph() != null) {
                    JFreeChart chart = RoiResults.getEnergyGraph();
                    JFrame pop = new JFrame();
                    pop.getContentPane().add(new ChartPanel(chart));
                    try {
                        pop.setIconImage(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/logo.png")));
                    } catch (Exception e11) {
                    }
                    pop.setTitle("ROI Graph");
                    pop.pack();
                    pop.setLocationRelativeTo(frmTitanRoiCalculator);
                    pop.setVisible(true);
                }
            }
        });
        pnlGraphEnergy.add(pnlGraphEnergyInner);
        pnlGraphEnergyInner.repaint();

        // marginal improvement label
        int ind1 = cmbMargEnergy1.getSelectedIndex();
        int ind2 = cmbMargEnergy2.getSelectedIndex();
        double diff = energydata.getValue(0, ind1).doubleValue() - energydata.getValue(0, ind2).doubleValue();
        lblMarginalEnergy.setText("" + formatDecimal(diff) + " per annum");

    }

}

From source file:atlas.kingj.roi.FrmMain.java

private void UpdateROIWaste(Machine[] mach) {

    if (results != null) {
        //ResetStatusLabel();
        double wasteflags = 0.;
        double wasteguide = 0.;
        double wastetable = 0.;
        try {/*  w ww  .j  av  a2  s . co m*/
            wasteflags = Math.max(0, Double.parseDouble(txtwastesavedflags.getText()));
            if (!metric)
                wasteflags = Core.FtToM(wasteflags);
        } catch (NumberFormatException e) {
            wasteflags = 0.;
        }
        try {
            wasteguide = Math.max(0, Double.parseDouble(txtwastesavedguide.getText()));
            if (!metric)
                wasteguide = Core.FtToM(wasteguide);
        } catch (NumberFormatException e) {
            wasteguide = 0.;
        }

        RoiData.wastesavedflag = wasteflags;
        RoiData.wastesavedguide = wasteguide;
        RoiData.wastesavedtable = wastetable;

        DefaultCategoryDataset wastedata = new DefaultCategoryDataset();
        String series1 = "Waste Saved";
        for (int i = 0; i < results.getSize(); ++i) {
            double totsave = 0.;
            double SchedulesPerYear = results.get(i).ScheduleTime == 0 ? 0
                    : environment.HrsPerYear / results.get(i).ScheduleTime;
            String name = results.get(i).getModel() + ": " + results.get(i).getName();
            if (mach[i].flags)
                totsave += wasteflags * results.get(i).SplicesPerSchedule * SchedulesPerYear;
            if (mach[i].alignment)
                totsave += wasteguide * results.get(i).MothersPerSchedule * SchedulesPerYear;
            if (mach[i].splice_table)
                totsave += wastetable * results.get(i).SplicesPerSchedule * SchedulesPerYear;
            wastedata.addValue(totsave, series1, name);
            RoiResults.get(i).wastesave = totsave;
            double conversion = results.get(i).getResult(ResultType.LENGTH, ResultTime.HOUR) == 0 ? 0
                    : results.get(i).getResult(ResultType.WEIGHT, ResultTime.HOUR)
                            / results.get(i).getResult(ResultType.LENGTH, ResultTime.HOUR) / 1000;
            RoiResults.get(i).wasteval = totsave * conversion * RoiData.sellingprice;
        }

        // draw graph
        JFreeChart chart = ChartFactory.createBarChart("", "", "Waste Reduced (m / year)", wastedata,
                PlotOrientation.VERTICAL, false, true, false);
        CategoryPlot cp = chart.getCategoryPlot();
        cp.setBackgroundPaint(new Color(240, 240, 240));
        cp.setRangeGridlinePaint(Color.gray);
        CategoryItemRenderer renderer = new CustomRenderer(
                new Paint[] { new Color(255, 85, 85), new Color(85, 85, 255), new Color(85, 255, 85),
                        new Color(251, 251, 0), new Color(86, 228, 200) });
        cp.setRenderer(renderer);
        BarRenderer b = (BarRenderer) cp.getRenderer();
        b.setBarPainter(new StandardBarPainter());
        renderer.setBaseToolTipGenerator(
                new StandardCategoryToolTipGenerator("{1}, {2}m", NumberFormat.getInstance()));

        RoiResults.setWasteGraph(chart);

        // Display results graph
        try {
            pnlGraphWaste.remove(lblNoGraph4);
        } catch (Exception e) {
        }
        try {
            pnlGraphWaste.remove(pnlGraphWasteInner);
        } catch (Exception e) {
        }
        pnlGraphWasteInner = new ChartPanel(RoiResults.getWasteGraph());
        pnlGraphWasteInner.setBounds(2, 2, 435, 258);
        pnlGraphWasteInner.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
                if (e.getButton() == MouseEvent.BUTTON1 && pnlGraphWasteInner.contains(e.getPoint())
                        && RoiResults != null && RoiResults.getWasteGraph() != null) {
                    JFreeChart chart = RoiResults.getWasteGraph();
                    JFrame pop = new JFrame();
                    pop.getContentPane().add(new ChartPanel(chart));
                    try {
                        pop.setIconImage(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/logo.png")));
                    } catch (Exception e11) {

                    }
                    pop.setTitle("ROI Graph");
                    pop.pack();
                    pop.setLocationRelativeTo(frmTitanRoiCalculator);
                    pop.setVisible(true);
                }
            }
        });
        pnlGraphWaste.add(pnlGraphWasteInner);
        pnlGraphWasteInner.repaint();

        // marginal improvement label
        int ind1 = cmbMargWaste1.getSelectedIndex();
        int ind2 = cmbMargWaste2.getSelectedIndex();
        double diff = wastedata.getValue(0, ind2).doubleValue() - wastedata.getValue(0, ind1).doubleValue();
        lblMarginalWaste.setText(
                formatDecimal((metric ? diff : Core.MToFt(diff))) + (metric ? "m per annum" : "ft per annum"));
        if (RoiData.value <= 0)
            lblMarginalWasteValue.setText("(0.00 per annum)");
        else {
            double conversion1 = results.get(ind1).getResult(ResultType.LENGTH, ResultTime.HOUR) == 0 ? 0
                    : results.get(ind1).getResult(ResultType.WEIGHT, ResultTime.HOUR)
                            / results.get(ind1).getResult(ResultType.LENGTH, ResultTime.HOUR);
            double conversion2 = results.get(ind2).getResult(ResultType.LENGTH, ResultTime.HOUR) == 0 ? 0
                    : results.get(ind2).getResult(ResultType.WEIGHT, ResultTime.HOUR)
                            / results.get(ind2).getResult(ResultType.LENGTH, ResultTime.HOUR);
            double weight1 = conversion1 * wastedata.getValue(0, ind1).doubleValue();
            double weight2 = conversion2 * wastedata.getValue(0, ind2).doubleValue();
            double diff_weight = weight2 - weight1;
            // convert to tonnes
            diff_weight = diff_weight / 1000;
            lblMarginalWasteValue
                    .setText("(" + formatDecimal(diff_weight * RoiData.sellingprice) + " per annum)");
        }

    }

}

From source file:atlas.kingj.roi.FrmMain.java

private void UpdateROIProd(Machine[] machs) { //TODO don't need machs actually... (part of results)

    if (results != null && RoiData.value >= 0) {

        if (listCompareRoi.getSelectedIndices().length > 1) {
            DefaultCategoryDataset roidata = new DefaultCategoryDataset();
            String series1 = "Value Added";
            double offset = 0.;
            for (int i = 0; i < results.getSize(); ++i) {
                String name = results.get(i).getModel() + ": " + results.get(i).getName();
                if (i == 0) {
                    // offset all relative to first value
                    offset = results.get(i).getResult(ResultType.WEIGHT, ResultTime.YEAR) * RoiData.value
                            / 1000;/*from w  w  w.  ja  v  a2 s  .co  m*/
                    roidata.addValue(0, series1, name);
                    RoiResults.get(i).value = 0;
                } else {
                    roidata.addValue(
                            results.get(i).getResult(ResultType.WEIGHT, ResultTime.YEAR) * RoiData.value / 1000
                                    - offset,
                            series1, name);
                    RoiResults.get(i).value = results.get(i).getResult(ResultType.WEIGHT, ResultTime.YEAR)
                            * RoiData.value / 1000 - offset;
                }
            }

            // draw graph
            JFreeChart chart = ChartFactory.createBarChart("", "", "Relative Value Added (/year)", roidata,
                    PlotOrientation.VERTICAL, false, true, false);
            CategoryPlot cp = chart.getCategoryPlot();
            cp.setBackgroundPaint(new Color(240, 240, 240));
            cp.setRangeGridlinePaint(Color.gray);
            CategoryItemRenderer renderer = new CustomRenderer(
                    new Paint[] { new Color(255, 85, 85), new Color(85, 85, 255), new Color(85, 255, 85),
                            new Color(251, 251, 0), new Color(86, 228, 200) });
            cp.setRenderer(renderer);
            BarRenderer b = (BarRenderer) cp.getRenderer();
            b.setBarPainter(new StandardBarPainter());
            renderer.setBaseToolTipGenerator(
                    new StandardCategoryToolTipGenerator("{1}, {2}", NumberFormat.getInstance()));
            ValueAxis va = cp.getRangeAxis();
            va.setLabelFont(new Font("Tahoma", Font.BOLD, 13));

            ResetStatusLabel();
            RoiResults.setProdGraph(chart);
            // Display results graph
            try {
                pnlGraphProd.remove(lblNoGraph);
            } catch (Exception e) {
            }
            try {
                pnlGraphProd.remove(pnlGraphProdInner);
            } catch (Exception e) {
            }
            pnlGraphProdInner = new ChartPanel(RoiResults.getProdGraph());
            pnlGraphProdInner.setBounds(2, 2, 435, 226);
            pnlGraphProdInner.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseReleased(MouseEvent e) {
                    if (e.getButton() == MouseEvent.BUTTON1 && pnlGraphProdInner.contains(e.getPoint())
                            && RoiResults != null && RoiResults.getProdGraph() != null) {
                        JFreeChart chart = RoiResults.getProdGraph();
                        JFrame pop = new JFrame();
                        pop.getContentPane().add(new ChartPanel(chart));
                        try {
                            pop.setIconImage(
                                    ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/logo.png")));
                        } catch (Exception e11) {

                        }
                        pop.setTitle("ROI Graph");
                        pop.pack();
                        pop.setLocationRelativeTo(frmTitanRoiCalculator);
                        pop.setVisible(true);
                    }
                }
            });
            pnlGraphProd.add(pnlGraphProdInner);
            pnlGraphProdInner.repaint();

            // marginal improvement label
            int ind1 = cmbMarg1.getSelectedIndex();
            int ind2 = cmbMarg2.getSelectedIndex();
            double diff = roidata.getValue(0, ind2).doubleValue() - roidata.getValue(0, ind1).doubleValue();
            lblMarginalImprovement.setText("" + formatDecimal(diff) + " per annum");
        } else {
            ResetStatusLabel();
            ShowMessageStandard("Select at least 2 machines to view marginal benefits.");
            lblMarginalImprovement.setText("0.00 per annum");
            // Display results graph
            try {
                pnlGraphProd.remove(pnlGraphProdInner);
            } catch (Exception e) {
            }
            pnlGraphProd.add(lblNoGraph);
            lblNoGraph.repaint();
        }

    } else {
        ShowMessageStandard("Enter relevant data above to view graph.");
        lblMarginalImprovement.setText("0.00 per annum");
        // Display results graph
        try {
            pnlGraphProd.remove(pnlGraphProdInner);
        } catch (Exception e2) {
        }
        pnlGraphProd.add(lblNoGraph);
        lblNoGraph.repaint();
    }

}

From source file:atlas.kingj.roi.FrmMain.java

private void UpdateROIMaint(Machine[] mach) {
    //ResetStatusLabel();

    if (results != null && RoiData.maintenance.size() >= results.getSize()) {
        DefaultCategoryDataset maintdata = new DefaultCategoryDataset();
        String series1 = "Basic Costs";
        String series2 = "Production Loss";
        for (int i = 0; i < results.getSize(); ++i) {
            String name = results.get(i).getModel() + ": " + results.get(i).getName();
            maintdata.addValue(RoiData.maintenance.get(listCompareRoi.getSelectedIndices()[i]).totcost, series1,
                    name);//from w w  w  . ja v  a2  s  .  c  o  m
            maintdata.addValue(
                    RoiData.value * RoiData.maintenance.get(listCompareRoi.getSelectedIndices()[i]).tothours
                            * results.get(i).getResult(ResultType.WEIGHT, ResultTime.HOUR) / 1000,
                    series2, name);
            RoiResults.get(i).prodloss = RoiData.value
                    * RoiData.maintenance.get(listCompareRoi.getSelectedIndices()[i]).tothours
                    * results.get(i).getResult(ResultType.WEIGHT, ResultTime.HOUR) / 1000;
            RoiResults.get(i).partcosts = RoiData.maintenance
                    .get(listCompareRoi.getSelectedIndices()[i]).totcost;
            RoiResults
                    .get(i).maintcost = RoiData.maintenance.get(listCompareRoi.getSelectedIndices()[i]).totcost
                            + RoiData.value
                                    * RoiData.maintenance.get(listCompareRoi.getSelectedIndices()[i]).tothours
                                    * results.get(i).getResult(ResultType.WEIGHT, ResultTime.HOUR) / 1000;
        }

        // draw graph
        //JFreeChart chart = ChartFactory.createBarChart("", "", "Maintenance Cost ( / year)", maintdata, PlotOrientation.VERTICAL, false, true, false);
        JFreeChart chart = ChartFactory.createStackedBarChart("", "", "Maintenance Cost ( / year)", maintdata,
                PlotOrientation.VERTICAL, true, true, false);
        CategoryPlot cp = chart.getCategoryPlot();
        cp.setBackgroundPaint(new Color(240, 240, 240));
        cp.setRangeGridlinePaint(Color.gray);
        CategoryItemRenderer renderer = new CustomRenderer(
                new Paint[] { new Color(255, 85, 85), new Color(85, 85, 255), new Color(85, 255, 85),
                        new Color(251, 251, 0), new Color(86, 228, 200) });
        //cp.setRenderer(renderer);
        cp.setShadowGenerator(new DefaultShadowGenerator(7, Color.DARK_GRAY, 1f, 5, -Math.PI / 4));
        BarRenderer b = (BarRenderer) cp.getRenderer();
        b.setBarPainter(new StandardBarPainter());
        renderer.setBaseToolTipGenerator(
                new StandardCategoryToolTipGenerator("{1}, {2}", NumberFormat.getInstance()));
        ValueAxis va = cp.getRangeAxis();
        va.setLabelFont(new Font("Tahoma", Font.BOLD, 13));

        RoiResults.setMaintGraph(chart);

        // Display results graph
        try {
            pnlGraphMaint.remove(lblNoGraph3);
        } catch (Exception e) {
        }
        try {
            pnlGraphMaint.remove(pnlGraphMaintInner);
        } catch (Exception e) {
        }
        pnlGraphMaintInner = new ChartPanel(RoiResults.getMaintGraph());
        pnlGraphMaintInner.setBounds(2, 2, 435, 238);
        pnlGraphMaintInner.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
                if (e.getButton() == MouseEvent.BUTTON1 && pnlGraphMaintInner.contains(e.getPoint())
                        && RoiResults != null && RoiResults.getMaintGraph() != null) {
                    JFreeChart chart = RoiResults.getMaintGraph();
                    JFrame pop = new JFrame();
                    pop.getContentPane().add(new ChartPanel(chart));
                    try {
                        pop.setIconImage(ImageIO.read(FrmMain.class.getResourceAsStream("/atlas/logo.png")));
                    } catch (Exception e11) {

                    }
                    pop.setTitle("ROI Graph");
                    pop.pack();
                    pop.setLocationRelativeTo(frmTitanRoiCalculator);
                    pop.setVisible(true);
                }
            }
        });
        pnlGraphMaint.add(pnlGraphMaintInner);
        pnlGraphMaintInner.repaint();

        // Update production loss stat
        try {
            int sel = cmbMachinesmaintenance.getSelectedIndex();
            if (arrayContains(listCompareRoi.getSelectedIndices(), sel))
                lblProdLoss
                        .setText(""
                                + formatDecimal(RoiData.value * RoiData.maintenance.get(sel).tothours
                                        * results.get(arrayIndex(listCompareRoi.getSelectedIndices(), sel))
                                                .getResult(ResultType.WEIGHT, ResultTime.HOUR)
                                        / 1000)
                                + " / year");
            else
                lblProdLoss.setText("Machine not selected");
        } catch (Exception e) {
            lblProdLoss.setText("0.00 / year");
        }

        // marginal improvement label
        int ind1 = cmbMargMaint1.getSelectedIndex();
        int ind2 = cmbMargMaint2.getSelectedIndex();
        double diff = maintdata.getValue(0, ind1).doubleValue() + maintdata.getValue(1, ind1).doubleValue()
                - maintdata.getValue(0, ind2).doubleValue() - maintdata.getValue(1, ind2).doubleValue();
        lblMarginalMaint.setText("" + formatDecimal(diff) + " per annum");
    }
}