Tuesday, September 23, 2008
Code to create a bar and line chart
MyLineChart.java
mport javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.LogAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.CategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
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.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.Range;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import java.awt.*;
import java.text.DecimalFormat;
public class MyLineChart extends JPanel{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
*
*/
//private static final long serialVersionUID = 1L;
public MyLineChart(final String title) {
super();
CategoryDataset dataset = createDataset();
final JFreeChart chart = createChart(dataset);
final JFreeChart chart2 = createChart2(dataset);
CategoryPlot plot = chart2.getCategoryPlot();
BarRenderer renderer = (BarRenderer) plot.getRenderer();
DecimalFormat decimalformat1 = new DecimalFormat("###.0");
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}",decimalformat1));
renderer.setItemLabelsVisible(true);
//double r = renderer.getUpperClip();
//set the range axis to display integers...
final NumberAxis rangeaxis = (NumberAxis) plot.getRangeAxis();
NumberTickUnit tick = new NumberTickUnit(rangeaxis.getUpperBound()/2);
rangeaxis.setTickUnit(tick);
//rangeaxis.getTickLabelFont();
//CategoryAxis domainaxis = plot.getDomainAxis();
//domainaxis.setCategoryMargin(1.0);
//renderer.setItemMargin(0.30);
// this.setLayout(new BorderLayout);
ChartPanel panel = new ChartPanel(chart);
ChartPanel panel2 = new ChartPanel(chart2);
panel.setPreferredSize(new Dimension(400,300));
panel2.setPreferredSize(new Dimension(600,400));
this.add(panel);
this.add(panel2);
}
private CategoryDataset createDataset()
{
String series1 = "First";
String series2 = "Second";
String series3 = "Third";
String category1 = "2001";
String category2 = "2002";
String category3 = "2003";
/*Number number1 = new Integer(20);
Number number2 = new Integer (35);
Number number3 = new Integer (50);*/
DefaultCategoryDataset dataset= new DefaultCategoryDataset();
dataset.addValue(1111.0, series1, category1);
dataset.addValue(4444.0, series1, category2);
dataset.addValue(3333.0, series1, category3);
dataset.addValue(5555.0, series2, category1);
dataset.addValue(7777.0, series2, category2);
dataset.addValue(6666.0, series2, category3);
dataset.addValue(44444.0, series3, category1);
dataset.addValue(333.0, series3, category2);
dataset.addValue(2222.0, series3, category3);
return dataset;
}
private JFreeChart createChart(final CategoryDataset dataset) {
// create the chart...
final JFreeChart chart = ChartFactory.createLineChart(
"Line Chart ", // chart title
"Type", // domain axis label
"Value", // range axis label
dataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips
false // urls
);
// NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
// final StandardLegend legend = (StandardLegend) chart.getLegend();
// legend.setDisplaySeriesShapes(true);
// legend.setShapeScaleX(1.5);
// legend.setShapeScaleY(1.5);
//legend.setDisplaySeriesLines(true);
chart.setBackgroundPaint(Color.white);
final CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setBackgroundPaint(Color.BLACK);
plot.setRangeGridlinePaint(Color.white);
final NumberAxis rangeaxis = (NumberAxis) plot.getRangeAxis();
NumberTickUnit tick = new NumberTickUnit(rangeaxis.getUpperBound()/2);
rangeaxis.setTickUnit(tick);
/*renderer.setSeriesStroke(
0, new BasicStroke(
2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
1.0f, new float[] {10.0f, 6.0f}, 0.0f
)
);
renderer.setSeriesStroke(
1, new BasicStroke(
2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
1.0f, new float[] {6.0f, 6.0f}, 0.0f
)
);
renderer.setSeriesStroke(
2, new BasicStroke(
2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
1.0f, new float[] {2.0f, 6.0f}, 0.0f
)
);
// OPTIONAL CUSTOMISATION COMPLETED.*/
return chart;
}
private JFreeChart createChart2(CategoryDataset dataset) {
final JFreeChart chart2 = ChartFactory.createBarChart(
"Bar Chart", // chart title
"Type", // domain axis label
"Value", // range axis label
dataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
false, // tooltips
false // urls
);
return chart2;
}
}
TestMyLineChart.java
import javax.swing.JFrame;
public class TestMyLineChart {
public static void main (String[] args)
{
MyLineChart bar = new MyLineChart("Line and Bar Chart");
JFrame frame = new JFrame("Line Chart");
frame.setVisible(true);
//frame.setLayout(BorderLayout);
frame.add(bar);
frame.setSize(800, 700);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
to change the scale on range axis
Finally i observed tick units. So, when i gave a try with the tick units (number tick units) it worked.
So, i used this method to change the scale on the range axis i.e. I needed only 3 points on the range axis according to the data entered.
final NumberAxis rangeaxis = (NumberAxis) plot.getRangeAxis();
NumberTickUnit tick = new NumberTickUnit(rangeaxis.getUpperBound()/2);
rangeaxis.setTickUnit(tick);
First i entered a reasonable value related to the data in the dataset. But, i wanted a method which calculates the value and places it in the method to re-scale range axis. So, i went through the NumberAxis, Axis, ValueAxis and CategoryAxis methods. But i couldn't find any.
While i know that the method which i am looking for is going to give me an upperbound and i know the method syntax, i was not sure whether it would work with NumberAxis object. I gave it a try and it worked well.
Friday, September 19, 2008
virtual memory low
I tried to find out the reason for that, i added some code for closing of the frame as i have been working with GUI application in java. I forgot to add that code. Now when i added that, the exe applications were not found in the task manager when the window was closed. Before adding the defaultCloseOperation code, they were visible in the task manager and running.
Thursday, September 18, 2008
to scale the range of the value axis in bar chart
resizeRange(double value) method of ValueAxis class but its of no use.
then tried to use setRangeAboutValue(value,length) but of no use.
i tried to find the method which directly manipulates the scale of the value axis but i couldn't do so.
Tuesday, September 16, 2008
JFreeChart: Bar Chart Demo 7 with a custom item label generator
http://www.java2s.com/Code/Java/Chart/JFreeChartBarChartDemo7withacustomitemlabelgenerator.htm
To insert the value of each bar on top of it
CategoryPlot plot = chart2.getCategoryPlot();
BarRenderer renderer = (BarRenderer) plot.getRenderer();
DecimalFormat decimalformat1 = new DecimalFormat("##,###.00");
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}",decimalformat1));
renderer.setItemLabelsVisible(true);
When this code was added....nothing happened
renderer.setItemLabelsVisible(true);
chart.getCategoryPlot().setRenderer(renderer);
Before setting the item labels visible, you need to first generate the labels by using setItemLabelGenerator, setStandardItemLabelGenerator.
These use decimalformat object to pass the value which handles the data format of the value.
Monday, September 15, 2008
Creating bar chart with trend line
But when you use Component instead of JFreeChart you cannot use the ChartFactory class which calls the creatBarchart and createLinechart methods.
As such i couldn't mix the two charts into one using JFreeChart.
But i was able to show to types of charts in one frame and 2 seperate panels.
Thursday, September 11, 2008
Customizing JFree chart : Pie Chart
read and write files
Using Streams to Read and Write Files
File streams are perhaps the easist streams to understand. Simply put, FileInputStream (FileOutputStream) represent an input (output) stream on a file that lives on the native file system. You can create a file stream from the filename, a File object or a FileDescriptor object. Use these streams to read data from or write data to files on the file system.This small example uses the file streams to copy the contents of one file into another.
import java.io.*;
class FileStreamsTest {
public static void main(String args[]) {
try {
FileInputStream fis = new FileInputStream("farrago.txt");
FileOutputStream fos = new FileOutputStream("outagain.txt");
int c;
while ((c = fis.read()) != -1) {
fos.write(c);
}
fis.close();
fos.close();
} catch (FileNotFoundException e) {
System.err.println("FileStreamsTest: " + e);
} catch (IOException e) {
System.err.println("FileStreamsTest: " + e);
}
}
http://telecom.ntua.gr/HTML.Tutorials/java/io/streampairs.html#FILES
}
time series chart
2. Now create a dataset object from TimeSeriesCollection class and add the series object to the dataset object.
3. Now create a chart object from JFreeChart class and add the dataset to it.
4. Now add the chart to the panel created.
regarding GUI
Now in main(): you add the object to the frame which is created before. Then you can observe the chart displayed graphically
Tuesday, September 9, 2008
JFREE RESOURCES...ECLIPSE
http://www.informit.com/guides/content.aspx?g=java&seqNum=76
http://www.screaming-penguin.com/node/4005
JFree chart tutorial
JFreeChart is a popular open source Java charting library that can generate most common chart types, including pie, bar, line, and Gantt charts. In addition, the JFreeChart API supports many interactive features, such as tool tips and zooming. JFreeChart provides an excellent choice for developers who need to add charts to Swing- or web-based applications.
Note: The following examples are based on JFreeChart version 0.9.4. To compile and run the code included with this column, you must have two jar files from the JFreeChart distribution, jfreechart-0.9.4.jar
and jcommon-0.7.1.jar
, in your classpath.
Charts and datasets
To create a chart using JFreeChart, you must create a Dataset
, which you then use to create a JFreeChart
. A Dataset
contains the data that displays in the chart. JFreeChart features many different Dataset
objects, which you can use to create assorted types of charts. Once you create a Dataset
, you next create the actual chart. JFreeChart uses an object appropriately named JFreeChart
to represent charts. You create JFreeChart
objects from Dataset
objects with the ChartFactory
class. In the following examples, we will create pie, XY, and bar charts along with their corresponding Dataset
objects.
Pie chart
A pie chart is created from a PieDataset
. The following example creates a PieDataset
using the DefaultPieDataset
class, adds two values via the setValue()
method, and then creates a pie chart with the ChartFactory
's createPieChart()
method. This example will create a pie chart with the title "Sample Pie Chart," a legend, and two slices: JavaWorld with 75 percent of the pie, and Other with the other 25 percent:
DefaultPieDataset pieDataset = new DefaultPieDataset();
pieDataset.setValue("JavaWorld", new Integer(75));
pieDataset.setValue("Other", new Integer(25));
JFreeChart chart = ChartFactory.createPieChart
("Sample Pie Chart", // Title
pieDataset, // Dataset
true // Show legend
);
XY chart
An XYDataset
can create area, line, and step XY charts. The following example creates an XYDataset
from a series of data containing three XY points. Next, ChartFactory
's createAreaXYChart()
method creates an area XY chart. In addition to parameters for title, dataset, and legend, createAreaXYChart()
takes in the labels for the X and Y axes:
XYSeries series = new XYSeries("Average Size");
series.add(20.0, 10.0);
series.add(40.0, 20.0);
series.add(70.0, 50.0);
XYDataset xyDataset = new XYSeriesCollection(series);
JFreeChart chart = ChartFactory.createAreaXYChart
("Sample XY Chart", // Title
"Height", // X-Axis label
"Weight", // Y-Axis label
xyDataset, // Dataset
true // Show legend
);
Bar chart
A CategoryDataset
can create numerous different charts, including horizontal and vertical bar charts. The following example creates a CatagoryDataset
with two series of data and two categories, and then creates a 3D vertical bar chart from this dataset. This example creates a chart that compares the sales growth in two quarters over two years:
String[] seriesNames = new String[] {"2001", "2002"};
String[] categoryNames = new String[] {"First Quater",
"Second Quater"};
Number[][] categoryData = new Integer[][] {{new Integer(20),
new Integer(35)},
{new Integer(40),
new Integer(60)}
};
CategoryDataset categoryDataset = new DefaultCategoryDataset
(seriesNames,
categoryNames,
categoryData);
JFreeChart chart = ChartFactory.createVerticalBarChart3D
("Sample Category Chart", // Title
"Quarters", // X-Axis label
"Sales", // Y-Axis label
categoryDataset, // Dataset
true // Show legend
);
Integrate JFreeChart
Integrating JFreeChart into a Swing application is relatively easy. Just create a BufferedImage
from the chart and use the image as an icon for a JLabel
:
BufferedImage image = chart.createBufferedImage(500,300);
JLabel lblChart = new JLabel();
lblChart.setIcon(new ImageIcon(image));
JFreeChart also includes a class named ChartUtilities
that provides several methods for saving charts to files or writing them out to streams in JPEG or PNG format. For example, the following piece of code can export a chart to a JPEG:
ChartUtilities.saveChartAsJPEG(new File("chart.jpg"), chart, 500, 300);
The methods in the ChartUtilities
class can be used to create JPEGs for use in a static Webpage, or used in a jsp (JavaServer Pages)/servlet-based application to dynamically stream charts to Webpages.
Another sources:
http://www.developerzone.biz/index.php?option=com_content&task=view&id=36&Itemid=36
Monday, September 8, 2008
quote:. . . remembering to put a "return" at the end of the last line.
Manifest-Version: 1.0
Class-Path: java-cup-11a.jar java-cup-11a-runtime.jar
Main-Class: uk.co.critchie.eiffel.test.EiffelFileReader
Then you go through the usual procedure for creating a .jar:
- Right-click the project in "package" on the left.
- Export
- Java->Jar File
- Click on name of project
- After the page where it says "packaging"->next
- Mark the radio button where it says "use existing manifest"
- Navigate to the manifest file, then "finish"
You need to put all the required files into the directory where the .jar file is.
Bingo. It is all working.
how to import .jar lib files
Now, all set.