954,545 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Plot Chart from a Txt file

Hello my friends

I have a txt file with the follow layout
error1 255
error2 34
error5 111
error3 23

and what i'm trying to achieve is, from this text file plot a trend chart with the errors and respective quantity!

this is the code that i'm using.... import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.*;
import java.util.*;
import java.lang.NumberFormatException;
import java.text.NumberFormat;
import java.text.MessageFormat;

import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.data.*;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.data.DomainOrder;
import org.jfree.data.general.SeriesDataset;
import org.jfree.data.category.DefaultCategoryDataset;


public class graph extends JFrame{

/**
*
*/
private static final long serialVersionUID = 0L;

public graph(String title) throws Exception{

super(title);

XYDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
chartPanel.setMouseZoomable(true, false);
}


// Well, here I read a file from a table in txt each line with 4 columns of numbers), save it in a string and then on a string
// Array of 4 elements. Then convert each element of the string to double (not know if I'm being very stupid, I am more beginner in java ...)
// What I'm trying to do is get two of those column (now in double) and put points on the method series.add below
// I think I have to do a loop of some way, then do what you suggested q ... But the loop that I did overwrite the variables
// My attempt was a normal access to the txt file

/* public extrator extract(String) throws Exception {
File file = new File("F:\\Ekralog.txt");
FileInputStream in = new FileInputStream(file);
InputStreamReader convert = new InputStreamReader(in);
BufferedReader bf = new BufferedReader(convert);
String line;
String[] element;
line = bf.readLine();
element = line.split("[\\s]+");
bf.close();
in.close();return

*/


private XYDataset createDataset() throws Exception {
//CONVERT STRING TO DOUBLE
//double element0;
//element0 = Double.parseDouble(element[0]); /* element[0] its one string*/

XYSeries series1 = new XYSeries("TRZ");
series1.add(1.0, 1.0); // some point that i've inserted to test and it is
series1.add(2.0, 4.0);// should i do a loop to test it.. there are more than 100 points
series1.add(3.0, 3.0);
series1.add(4.0, 5.0);
series1.add(5.0, 5.0);
series1.add(6.0, 7.0);
series1.add(7.0, 7.0);
series1.add(8.0, 8.0);



XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series1);

return dataset;


}
// ListDouble colunas = new ArrayListDouble();

//public ListDouble getColunas(){

// return colunas;

// }


private JFreeChart createChart(XYDataset dataset) {
// create the chart...
JFreeChart chart = ChartFactory.createXYLineChart(
"Medida", // chart title
"X", // x axis label
"Y", // y axis label
dataset, // data
PlotOrientation.VERTICAL,
true, // include legend
true, // tooltips
false // urls

);

return chart;
}

public static void main(String[] args) throws Exception {
graph teste = new graph("test");
teste.pack();
teste.setVisible(true);
}

}

jorgeflorencio
Light Poster
45 posts since Apr 2008
Reputation Points: 7
Solved Threads: 0
 

and your point is???

stultuske
Posting Sensei
3,137 posts since Jan 2007
Reputation Points: 1,114
Solved Threads: 433
 
and your point is???

Hi there...

The graphic is not plotting can anyone help me to find where is the problem...

jorgeflorencio
Light Poster
45 posts since Apr 2008
Reputation Points: 7
Solved Threads: 0
 

The graph shows just fine for me.

Ezzaral
Posting Genius
Moderator
15,986 posts since May 2007
Reputation Points: 3,250
Solved Threads: 847
 
The graph shows just fine for me.


Really... it getting the data from the txt file ?

:-O

jorgeflorencio
Light Poster
45 posts since Apr 2008
Reputation Points: 7
Solved Threads: 0
 

No of course not. I don't have that file and you have it commented out. You said the graphic was not plotting.

Ezzaral
Posting Genius
Moderator
15,986 posts since May 2007
Reputation Points: 3,250
Solved Threads: 847
 
No of course not. I don't have that file and you have it commented out. You said the graphic was not plotting.

It was not plotting the data imported from the file,,,
the file contents...error1 255
error2 34
error5 111
error3 23

it looks like this.... 1st column is the error description and the second the quantity...

:) sorry about my fail

jorgeflorencio
Light Poster
45 posts since Apr 2008
Reputation Points: 7
Solved Threads: 0
 

I don't think you want an XYSeries for that. If you want it to be a line chart (bar chart seems more appropriate to me, but you seem to want the line chart), try this instead

private CategoryDataset createDataset() throws Exception {

    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    dataset.addValue(255, "Errors", "error1");
    dataset.addValue(34, "Errors", "error2");
    dataset.addValue(111, "Errors", "error5");
    dataset.addValue(23, "Errors", "error3");

    return dataset;
}

private JFreeChart createChart(CategoryDataset dataset) {
    // create the chart...
    JFreeChart chart = ChartFactory.createLineChart(
            "Medida", // chart title
            "Error Code", // x axis label
            "Count", // y axis label
            dataset, // data
            PlotOrientation.VERTICAL,
            true, // include legend
            true, // tooltips
            false // urls
    );

    return chart;
}


All you have to do is build that category dataset with the first and second elements of your spilt() on the text file line.

Ezzaral
Posting Genius
Moderator
15,986 posts since May 2007
Reputation Points: 3,250
Solved Threads: 847
 

You are right... i want a bar chart... but as a newby i'm still trying to discover to potential of the javafreechart... reading trying reading trying... i'm too slowwww...

thank you for your lights...~

to change for a bar type what should i dooo?? :(

I don't think you want an XYSeries for that. If you want it to be a line chart (bar chart seems more appropriate to me, but you seem to want the line chart), try this instead

private CategoryDataset createDataset() throws Exception {

    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    dataset.addValue(255, "Errors", "error1");
    dataset.addValue(34, "Errors", "error2");
    dataset.addValue(111, "Errors", "error5");
    dataset.addValue(23, "Errors", "error3");

    return dataset;
}

private JFreeChart createChart(CategoryDataset dataset) {
    // create the chart...
    JFreeChart chart = ChartFactory.createLineChart(
            "Medida", // chart title
            "Error Code", // x axis label
            "Count", // y axis label
            dataset, // data
            PlotOrientation.VERTICAL,
            true, // include legend
            true, // tooltips
            false // urls
    );

    return chart;
}
All you have to do is build that category dataset with the first and second elements of your spilt() on the text file line.
jorgeflorencio
Light Poster
45 posts since Apr 2008
Reputation Points: 7
Solved Threads: 0
 

something like this^??????

JFreeChart chart = ChartFactory.createBarChart(
jorgeflorencio
Light Poster
45 posts since Apr 2008
Reputation Points: 7
Solved Threads: 0
 

There is a bar chart demo file in the source\org\jfree\chart\demo directory of JFreeChart.

Ezzaral
Posting Genius
Moderator
15,986 posts since May 2007
Reputation Points: 3,250
Solved Threads: 847
 
There is a bar chart demo file in the source\org\jfree\chart\demo directory of JFreeChart.


thank you once again....

my problem is allways with the collectage of the data from the txt file....

thank you

jorgeflorencio
Light Poster
45 posts since Apr 2008
Reputation Points: 7
Solved Threads: 0
 

You already have the basic part of that in place. Read each line of the file, use split() to separate the elements, then add that pair of values to your series for the chart.

Ezzaral
Posting Genius
Moderator
15,986 posts since May 2007
Reputation Points: 3,250
Solved Threads: 847
 

please tell me steps to draw bar graph from a file values using java and also code....

sadikds
Newbie Poster
1 post since Sep 2010
Reputation Points: 10
Solved Threads: 0
 
please tell me steps to draw bar graph from a file values using java and also code....

you want to use Java AND code? now, that 'll be a tough one I bet.
I'll give you the first couple of steps though:
1. try yourself
2. when you get in trouble, start a NEW thread, show us your efforts so we can see where you're going wrong
3. but hey, just read the thread you're replying to, everything you need can be derived from it

stultuske
Posting Sensei
3,137 posts since Jan 2007
Reputation Points: 1,114
Solved Threads: 433
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You