org.neo4j.bench.chart.JFreeBarChart.java Source code

Java tutorial

Introduction

Here is the source code for org.neo4j.bench.chart.JFreeBarChart.java

Source

/**
 * Copyright (c) 2002-2011 "Neo Technology,"
 * Network Engine for Objects in Lund AB [http://neotechnology.com]
 *
 * This file is part of Neo4j.
 *
 * Neo4j is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package org.neo4j.bench.chart;

import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.CategoryItemLabelGenerator;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.AbstractDataset;
import org.jfree.ui.TextAnchor;
import org.neo4j.bench.RunUtil;

public class JFreeBarChart extends AbstractJFreeChart<AbstractDataset> {
    private List<Integer> numberOfIterationsList;

    @Override
    protected AbstractDataset instantiateDataset() {
        this.numberOfIterationsList = new ArrayList<Integer>();
        return new DefaultCategoryDataset();
    }

    @Override
    protected JFreeChart createChart(AbstractDataset dataset) {
        JFreeChart chart = ChartFactory.createBarChart("Performance chart", "Bench case", "Time(s)",
                (DefaultCategoryDataset) dataset, PlotOrientation.VERTICAL, true, true, false);

        rotateCategoryAxis(chart, Math.PI / 4.0);
        CategoryPlot plot = chart.getCategoryPlot();
        BarRenderer renderer = (BarRenderer) plot.getRenderer();
        renderer.setItemLabelGenerator(new CategoryItemLabelGenerator() {
            public String generateColumnLabel(CategoryDataset dataset, int column) {
                return "col" + column;
            }

            public String generateLabel(CategoryDataset dataset, int row, int column) {
                return "" + dataset.getValue(row, column).intValue();
            }

            public String generateRowLabel(CategoryDataset dataset, int row) {
                return "row" + row;
            }
        });
        renderer.setBaseItemLabelPaint(Color.black);
        renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.INSIDE12,
                TextAnchor.CENTER_RIGHT, TextAnchor.CENTER_RIGHT, -Math.PI / 2.0));
        renderer.setItemLabelsVisible(true);

        return chart;
    }

    @Override
    protected void addValue(AbstractDataset dataset, Map<String, String> header, double value,
            int numberOfIterations, String benchCase, String timer) {
        DefaultCategoryDataset theDataset = (DefaultCategoryDataset) dataset;
        String rowKey = header.get(RunUtil.KEY_NEO_VERSION);
        String columnKey = RunUtil.getNiceBenchCaseName(benchCase, timer, numberOfIterations);
        theDataset.addValue(value, rowKey, columnKey);
        this.numberOfIterationsList.add(numberOfIterations);
    }
}