Creating A 3D Category Bar Chart In Java Using JFreeChart [Example Source Code]

About Bar Chart:
A bar chart or bar graph is a chart with rectangular bars with lengths proportional to the values that they represent. Bar charts are used for comparing two or more values that were taken over time or on different conditions, usually on small data sets. The bars can be horizontally oriented (also called bar chart) or vertically oriented (also called column chart). Sometimes a stretched graphic is used instead of a solid bar. It is a visual display used to compare the amount or frequency of occurrence of different characteristics of data and it is used to compare groups of data.

About JFreeChart:
JFreeChart is an open-source framework for the programming language Java, which allows the creation of complex charts in a simple way.

JFreeChart also works with GNU Classpath, a free software implementation of the standard class library for the Java programming language.

Following chart types are supported:

  • X-Y charts (line, spline and scatter)
  • Pie charts
  • Gantt charts
  • Bar charts (horizontal and vertical, stacked and independent)
  • Single valued (thermometer, compass, speedometer)

If you do not have the JFreeChart library and API, you can download it from their website www.jfree.org

My Tutorial / Example Source Code:
My Tutorial focuses on creating a category bar chart. In this tutorial we will

  • — Create Sample Category Data Set
  • — Create a 3D Category Bar Chart with the sample data. This graph will have horizontal plot orientation.
  • — We will then save the generated chart to the filesystem.
  • — We will repeat to create a plot with vertical orientation and also save the generated vertically oriented bar chart to the filesystem.

The program code, sample output, and the generated charts are given below.

package com.kushal.charts;
/**
 * @Author Kushal Paudyal
 * www.sanjaal.com/java
 * Last Modfied On: 2009-09-23
 *
 * Using JFreeChart to create 3D Category Bar Chart
 */
import java.awt.Color;
import java.io.File;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

public class My3DCategoryChart {
private static final long serialVersionUID = -8625975218180144099L;

private CategoryDataset createCategoryDataset() {
final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(225.0, "15-20 Years", "Male");
dataset.addValue(419.0, "20-30 Years", "Male");
dataset.addValue(141.0, "30-40 Years", "Male");

dataset.addValue(634.0, "15-20 Years", "Female");
dataset.addValue(229.0, "20-30 Years", "Female");
dataset.addValue(433.0, "30-40 Years", "Female");
return dataset;

}

private JFreeChart create3DBarChart(CategoryDataset dataset,
PlotOrientation plotOrientation) {
JFreeChart chart = ChartFactory.createBarChart3D(
"3D Bar Chart Demo - www.sanjaal.com/java", //Chart Title
"Gender", //Domain Axis Label
"Avg Minutes Spent On Sanjaal.com Per Day", //Range Axis Label
dataset, //Data
plotOrientation, //Orientation
true, //Include Legend
true, //Tooltips
false //Urls
);

CategoryPlot plot = chart.getCategoryPlot();
CategoryAxis axis = plot.getDomainAxis();
axis.setCategoryLabelPositions(CategoryLabelPositions
.createUpRotationLabelPositions(Math.PI / 16.0));

CategoryItemRenderer renderer = plot.getRenderer();
BarRenderer r = (BarRenderer) renderer;
r.setMaximumBarWidth(0.1);
chart.setBackgroundPaint(Color.WHITE);

return chart;

}

public void saveChart(JFreeChart chart, String fileLocation) {
try {
/**
* This utility saves the JFreeChart as a JPEG First Parameter:
* FileName Second Parameter: Chart To Save Third Parameter: Height
* Of Picture Fourth Parameter: Width Of Picture
*/
ChartUtilities.saveChartAsJPEG(new File(fileLocation), chart, 800,
600);
} catch (IOException e) {
e.printStackTrace();
System.err.println("Problem occurred creating chart.");
}
}

public static void main(String[] args) {
My3DCategoryChart chartCreator = new My3DCategoryChart();

/** Create a Category Data Set* */
CategoryDataset categoryDataset = chartCreator.createCategoryDataset();

/** Create 3D Category Chart (Horizontal) based on this dataset* */
JFreeChart chartHorizontal = chartCreator.create3DBarChart(
categoryDataset, PlotOrientation.HORIZONTAL);

/** Define a location to save this created file* */
String horizontalChartFileSaveLocation = "C:/temp/my3DCategoryChartHorizontal.jpg";

/** Save the chart to the file system* */
chartCreator
.saveChart(chartHorizontal, horizontalChartFileSaveLocation);
System.out.println("Horizontal Category Chart Created Successfully");
System.out.println("Chart has been saved to: "
+ horizontalChartFileSaveLocation);

/** Create 3D Category Chart (Vertical) based on this dataset* */
JFreeChart chartVertical = chartCreator.create3DBarChart(
categoryDataset, PlotOrientation.VERTICAL);

/** Define a location to save this created file* */
String verticalChartFileSaveLocation = "C:/temp/my3DCategoryChartVertical.jpg";

/** Save the chart to the file system* */
chartCreator.saveChart(chartVertical, verticalChartFileSaveLocation);

System.out.println("nVertical Category Chart Created Successfully");
System.out.println("Chart has been saved to: "
+ verticalChartFileSaveLocation);

}

/*
* SANJAAL CORPS MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
* THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SANJAAL CORPS SHALL NOT BE LIABLE FOR
* ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
*
* THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE
* CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE
* PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT
* NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE
* SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE
* SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE
* PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). SANJAAL CORPS
* SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR
* HIGH RISK ACTIVITIES.
*/
}

The following is the output of this program.

Horizontal Category Chart Created Successfully
Chart has been saved to: C:/temp/my3DCategoryChartHorizontal.jpg

Vertical Category Chart Created Successfully
Chart has been saved to: C:/temp/my3DCategoryChartVertical.jpg

The chart that are generated by this application are given below.

Horizontally Oriented Category Bar Chart:

Vertically Oriented Category Bar Chart:

[My Video Promotion]
Tagged , , , , , , , . Bookmark the permalink.

6 Responses to Calculating Folder Size Graphically and Generating Directory Size Chart In Java

  1. nocdib says:

    Thank you for this! It is just what I need

  2. d says:

    would that help you tocreate the file from ubunt server

  3. komal gaikwad says:

    in this code i got problem of array out of bound plz tell me solution.

  4. komal gaikwad says:

    In this code i got error
    Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 1
    plz send me proper code….

  5. Neethu says:

    Thank you very much for the solution. This is the one which i was searching.

  6. Manikant says:

    I need to copy to the shared folder which is shared and can be authenticate by using credentials.

    but here the code is giving to write .

    I need copy my folder from my local to shared location

    Please help

Leave a Reply to d Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.