How to show the points of the values in XYLine chart

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
jesusmgmarin
Posts: 13
Joined: Thu Apr 20, 2006 2:24 pm
Location: Spain
Contact:

How to show the points of the values in XYLine chart

Post by jesusmgmarin » Thu Sep 14, 2006 11:14 am

Hi, I have a method that paint a graph with the values of an array[][],
I need that this method show the points of the values (in addition to the XYline) (In order to know in what points of the line are the values)

My code I use is:

Code: Select all

public JFreeChart XYLine(String vInDep, String vDep){
		
    XYSeries series = new XYSeries("Leyenda de Línea");
		
    /* We cross the bidimensional Array adding it to the chart, as long as null value by row does not exist	*/
    for (int i=0; i<arrayVars.length; i++){
        if( (null != arrayVars[i][0]) && (null != arrayVars[i][1]) ){
            float x= Float.parseFloat(arrayVars[i][0]);
            float y= Float.parseFloat(arrayVars[i][1]);
            series.add(x,y);	
        }
    }
		
    XYDataset ColeccionDatos = new XYSeriesCollection(series);
	
    JFreeChart chart = ChartFactory.createXYLineChart(
        "Chart Simple "+vDep+" vs "+vInDep,		//Titulo
        vInDep,			//Leyenda Eje X
        vDep,			//Leyenda Eje Y
        ColeccionDatos,			//Dataset
        PlotOrientation.HORIZONTAL,	//Orientacion
        false,      //Flag que identifica que la leyenda sea requerida o no
        true,		//Flag que identifica si se debe generar el tooltip
        false	//Flag que identifica si el chart debe o no generar URLs
        );
		
    XYPlot plot = (XYPlot) chart.getPlot();
    NumberAxis rangeAxis = (NumberAxis) plot.getDomainAxis();
    rangeAxis.setInverted(true);
						
    /* line´s color */
    final XYItemRenderer renderer = (XYItemRenderer)plot.getRenderer();
    renderer.setSeriesPaint(0,Color.blue); //since you only have one series. 
    /* line´s color */

    return chart;
}


Other question:
How can I do that the line of the graph is fatter?


Thanks very much!!

Ivoryn
Posts: 8
Joined: Tue Apr 04, 2006 2:01 pm

Post by Ivoryn » Thu Sep 14, 2006 12:46 pm

you can make the lines fatter by:

plot.getRenderer().setSeriesStroke(0, new BasicStroke(2.0f));

for example :)

hiker
Posts: 3
Joined: Thu Aug 17, 2006 9:44 am
Location: Germany

Post by hiker » Fri Sep 15, 2006 8:35 am

to show the points do sth. like this:

Code: Select all

renderer.setSeriesShape(0, new Rectangle(-2, -2, 4, 4));
renderer.setSeriesShapesVisible(0, true);
renderer.setShapesFilled(true);
instead of using Rectangle to show your points, you can use Ellipse2D, or other geom-objects as well.

greets M.

jesusmgmarin
Posts: 13
Joined: Thu Apr 20, 2006 2:24 pm
Location: Spain
Contact:

Post by jesusmgmarin » Sat Sep 23, 2006 12:03 pm

Thanks, but I have a problem,
I posted:

Code: Select all

public JFreeChart XYLine(String vInDep, String vDep){ 
       
    XYSeries series = new XYSeries("Leyenda de Línea"); 
       
    /* We cross the bidimensional Array adding it to the chart, as long as null value by row does not exist   */ 
    for (int i=0; i<arrayVars.length; i++){ 
        if( (null != arrayVars[i][0]) && (null != arrayVars[i][1]) ){ 
            float x= Float.parseFloat(arrayVars[i][0]); 
            float y= Float.parseFloat(arrayVars[i][1]); 
            series.add(x,y);    
        } 
    } 
       
    XYDataset ColeccionDatos = new XYSeriesCollection(series); 
    
    JFreeChart chart = ChartFactory.createXYLineChart( 
        "Chart Simple "+vDep+" vs "+vInDep,      //Titulo 
        vInDep,         //Leyenda Eje X 
        vDep,         //Leyenda Eje Y 
        ColeccionDatos,         //Dataset 
        PlotOrientation.HORIZONTAL,   //Orientacion 
        false,      //Flag que identifica que la leyenda sea requerida o no 
        true,      //Flag que identifica si se debe generar el tooltip 
        false   //Flag que identifica si el chart debe o no generar URLs 
        ); 
       
    XYPlot plot = (XYPlot) chart.getPlot(); 
    NumberAxis rangeAxis = (NumberAxis) plot.getDomainAxis(); 
    rangeAxis.setInverted(true); 
                   
    /* line´s color */ 
    final XYItemRenderer renderer = (XYItemRenderer)plot.getRenderer(); 
    renderer.setSeriesPaint(0,Color.blue); //since you only have one series. 
    /* line´s color */ 


   /* ******************** NEW LINES ******************** */ 
   /* ******************** NEW LINES ******************** */
    renderer.setSeriesShape(0, new Rectangle(-2, -2, 4, 4)); 
    renderer.setSeriesShapesVisible(0, true); 
    renderer.setShapesFilled(true);
    /* ******************** NEW LINES ******************** */ 
    /* ******************** NEW LINES ******************** */


    plot.setRenderer(renderer); 


    return chart; 
}

but when I compile the code:

Code: Select all

Graphs.java:167: cannot resolve symbol
symbol  : method setSeriesShapesVisible (int,boolean)
location: interface org.jfree.chart.renderer.xy.XYItemRenderer
                                        renderer.setSeriesShapesVisible(0, true);
                                                ^
Graphs.java:168: cannot resolve symbol
symbol  : method setShapesFilled (boolean)
location: interface org.jfree.chart.renderer.xy.XYItemRenderer
                                        renderer.setShapesFilled(true);
                                                ^
2 errors
and I have in the code something like:

Code: Select all

import java.io.*;
import java.net.*;
import java.util.*;
import java.text.*;

import org.jfree.data.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.data.xy.*;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;


import org.jfree.chart.axis.NumberAxis;

import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.chart.renderer.xy.XYAreaRenderer;
import java.awt.Color;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;

import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickMarkPosition;
import org.jfree.chart.axis.ValueAxis;
import java.awt.BasicStroke;

import java.awt.image.*;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.*;
import javax.servlet.http.*;

import java.awt.Rectangle;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer.*;
Why those errors??

hiker
Posts: 3
Joined: Thu Aug 17, 2006 9:44 am
Location: Germany

Post by hiker » Wed Sep 27, 2006 2:24 pm

well...
if you are using a XYItemRenderer it doesn't work, because that renderer knows nothing about the methods setSeriesShapesVisible and setShapesFilled. Your IDE (Eclipse, JBuilder or whatever) should tell you this by saying sth like "method is undefined for the type XYItemRenderer ".
Try using a Shape Renderer for example XYLineAndShapeRenderer.

Locked