line under the dynamic graph

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
malli108
Posts: 4
Joined: Thu Apr 26, 2012 1:54 pm
antibot: No, of course not.

line under the dynamic graph

Post by malli108 » Thu Apr 26, 2012 2:03 pm

hi i am new to this forum. in my chart(DynamicTimeCollection) i am getting a line under as the data is progressing. i am attaching image please help me.
Image

John Matthews
Posts: 513
Joined: Wed Sep 12, 2007 3:18 pm

Re: line under the dynamic graph

Post by John Matthews » Fri Apr 27, 2012 11:19 am

It's hard to say without seeing your code, but the picture suggests trying the approach shown here.

malli108
Posts: 4
Joined: Thu Apr 26, 2012 1:54 pm
antibot: No, of course not.

Re: line under the dynamic graph

Post by malli108 » Mon Apr 30, 2012 6:04 am

here is my codei tried what u have suggested it din't work

Code: Select all

package charts;

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;

import java.awt.Paint;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.GregorianCalendar;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPanel;

import javax.swing.UIManager;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.DateTickUnitType;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.Marker;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.Range;
import org.jfree.data.time.DynamicTimeSeriesCollection;
import org.jfree.data.time.Hour;
import org.jfree.data.time.Minute;
import org.jfree.data.time.Second;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;

public class DTest extends ApplicationFrame {

    javax.swing.Timer _timer;
    int nPoints = 180;
    float[] history;
    /** The most recent value added. */
    private float lastValue = (float) 50.56;
    DynamicTimeSeriesCollection dataset;
    JPanel content;
    private final ChartPanel chartPanel;
  /*****************************************/
  Calendar calendar = new GregorianCalendar();
  
  
  
  int date = calendar.get(Calendar.DAY_OF_MONTH);
  int month = calendar.get(Calendar.MONTH);
  int year = calendar.get(Calendar.YEAR);
  int hours = calendar.get(Calendar.HOUR_OF_DAY);
  int minutes = calendar.get(Calendar.MINUTE);
  int seconds = calendar.get(Calendar.SECOND);
  /*****************************************/
  
    
   ValueAxis axis ;
    DateAxis dateAxis ;
    public DTest(final String title) {

        super(title);
        history = new float[nPoints];
        dataset = new DynamicTimeSeriesCollection(
                2, nPoints, new Second());
        
        dataset.setTimeBase(new Second(seconds,minutes,hours,date,month,year));
      
        dataset.addSeries(new float[]{0.0f}, 0, "Current Curency");
        System.out.println("Series count = " + dataset.getSeriesCount());
        final JFreeChart chart = createChart(dataset);
        
        chartPanel = new ChartPanel(chart);
        content = new JPanel(new FlowLayout());

        final JButton btn = new JButton("Stop");
        btn.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                _timer.stop();
            }
        });
        final JButton btn1 = new JButton("Run");
        btn1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                // create new dataset and chart, set the new chart in the chartpanel


                //createChart(dataset);

                _timer.start();
            }
        });
        JComboBox comb = new JComboBox();
        comb.addItem("Select");
        comb.addItem("Joy Stick");

        content.add(chartPanel);//panel for chart
        JPanel btnPanel = new JPanel(new FlowLayout());
        btnPanel.add(btn);
        btnPanel.add(btn1);
        btnPanel.add(comb);

        Container pane = getContentPane();
        pane.setLayout(new BorderLayout());
        pane.add(content, BorderLayout.NORTH);
        pane.add(btnPanel, BorderLayout.CENTER);


        chartPanel.setPreferredSize(new java.awt.Dimension(800, 470));
        //setContentPane(content);
        comb.addActionListener(new ActionListener() {

            private float[] float_array;
            private int itemCount;

            public void actionPerformed(ActionEvent e) {
                JComboBox jComb = (JComboBox) e.getSource();
                if (jComb.getSelectedItem().equals("Joy Stick")) {
                 
                  date = calendar.get(Calendar.DAY_OF_MONTH);
                  month = calendar.get(Calendar.MONTH);
                  year = calendar.get(Calendar.YEAR);
                  hours = calendar.get(Calendar.HOUR_OF_DAY);
                  minutes = calendar.get(Calendar.MINUTE);
                  seconds = calendar.get(Calendar.SECOND);
                    
                    System.out.println(seconds);
                  System.out.println(minutes);
                    try {
                        float_array = new float[1];
                        float_array[0] = 0;
                        itemCount = 0;
                        dataset.advanceTime();
                        dataset.appendData(float_array);
                        dataset.addSeries(new float[]{0.0f}, 0, "Currnet Currency");

                        _timer = new javax.swing.Timer(1, new ActionListener() { // 500ms

                            private int resizes;
                            private int inserted;
                            public void actionPerformed(ActionEvent e) {
                            
                                double factor = 2 * Math.random();
                                
                                if (lastValue >51){
                                  lastValue=lastValue-(float)factor;
                                }else {
                                  lastValue = lastValue + (float) factor;
                                }
                                float_array[0] = lastValue;
                                System.out.println("lastValue is " + lastValue);

                                inserted++;
                                if ( inserted % (resizes+1)==0 )
                                    dataset.appendData(float_array, itemCount++, 1);
                                history[itemCount] = lastValue;
                                if (itemCount >= nPoints - 1) {
                                    resizes++;
                                    DynamicTimeSeriesCollection newSet = new DynamicTimeSeriesCollection(2, nPoints, new Second());
                                    newSet.setTimeBase(new Second(seconds,minutes,hours,date,month,year));
                                    newSet.addSeries(new float[]{0.0f}, 0, "Currnet Currency");
                                    itemCount /= 2;
                                    for (int i = 1; i < nPoints; i++) {
                                        history[i / 2] = history[i];
                                        float_array[0]=history[i / 2];
                                        newSet.appendData(float_array, i/2, 1);
                                        history[i] = 0;
                                    }
                                    chartPanel.setChart(createChart(newSet));
                                    dataset = newSet;
                                    chartPanel.repaint();
                                }
                            }
                        });

                        _timer.setRepeats(true);
                        _timer.start();
                      _timer.setDelay(970);

                    } catch (NullPointerException ne) {
                        System.out.println("NullPointer Exception" + ne.toString());
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                } else {  ;

                }

            }
        });
    }

    private JFreeChart createChart(final XYDataset dataset) {
        final JFreeChart result = ChartFactory.createTimeSeriesChart(
                "Dynamic Graph", "Time", "Value", dataset, true, true,
                false);
        final XYPlot plot = (XYPlot)result.getXYPlot();  
        
 
      plot.setBackgroundPaint(Color.LIGHT_GRAY);
      plot.setDomainGridlinePaint(Color.WHITE);
      plot.setRangeGridlinePaint(Color.WHITE);
      plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
      plot.setDomainCrosshairVisible(true);
      plot.setRangeCrosshairVisible(true);
      
      XYItemRenderer r = plot.getRenderer();
      
      if (r instanceof XYLineAndShapeRenderer) {
      XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r;
         renderer.setBaseShapesVisible(true);
         renderer.setBaseShapesFilled(true);
         renderer.setBasePaint(Color.white);
         renderer.setSeriesPaint(0,Color.BLUE);
      }
     
        dateAxis= (DateAxis)plot.getDomainAxis();
      
        DateTickUnit unit = null;
        unit = new DateTickUnit(DateTickUnitType.SECOND,30);
      
        DateFormat chartFormatter = new SimpleDateFormat("HH:mm:ss");
        dateAxis.setDateFormatOverride(chartFormatter);

        dateAxis.setTickUnit(unit);
        
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        rangeAxis.setRange(47.0000, 54.5000);
        rangeAxis.setAutoRangeIncludesZero(false);
        return result;
    }

    public static void main(final String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                try {
                    final DTest demo = new DTest("Dynamic Graph");
                    demo.pack();
                    RefineryUtilities.centerFrameOnScreen(demo);

                    UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
                    demo.setVisible(true);

                } catch (Exception e) {
                }
            }
        });


    }
}

paradoxoff
Posts: 1634
Joined: Sat Feb 17, 2007 1:51 pm

Re: line under the dynamic graph

Post by paradoxoff » Tue May 01, 2012 9:23 am

fyi: when I ran your code it threw a NullPointerException because _timer is not intialized.

malli108
Posts: 4
Joined: Thu Apr 26, 2012 1:54 pm
antibot: No, of course not.

Re: line under the dynamic graph

Post by malli108 » Wed May 02, 2012 9:06 am

i am not getting any errors but the graph is showing as in picture above

Locked