Avatar billede kenneth_breve Nybegynder
17. december 2007 - 14:56 Der er 9 kommentarer og
1 løsning

Nogen som ligger inde med kode eksempel for JFreeChart?

Hej

Jeg skal til at lave en graf i en java applet. Grafen skal plotte f.eks. 10 data par i en ganske almindelig XY graf.
(Skal senere udvides til flere funktioner)

Nogen som ligger inde med et kode eksempel til dette simple eksempel hvor JFreeChart er benyttet?
Avatar billede arne_v Ekspert
17. december 2007 - 15:12 #1
import java.awt.Color;
import java.awt.Dimension;
import java.text.SimpleDateFormat;
import java.util.Random;

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.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.time.Month;
import org.jfree.data.time.MovingAverage;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.ui.ApplicationFrame;

public class JFCDemo {
    public static void main(String[] args) {
        new TimeSeriesDemo();
        new PieDemo();
        new BarsDemo();
    }
}

class TimeSeriesDemo extends ApplicationFrame {
    private static Random rng = new Random();
    public TimeSeriesDemo() {
      super("Time series demo");
      double[] v = new double[96];
      v[0] = 100;
      for(int i = 1; i < v.length; i++) {
          v[i] = v[i-1] + 1 + 10 * (rng.nextDouble() - 0.5);
      }
      TimeSeries ts1 = new TimeSeries("Random data", Month.class);
      for(int y = 2000; y < 2008; y++) {
          for(int m = 1; m < 12; m++) {
              ts1.add(new Month(m, y), v[12 * (y - 2000) + m -1]);
          }
      }
      TimeSeries ts2 = MovingAverage.createMovingAverage(ts1, "3 month mov.avg.", 3, 0);
      TimeSeries ts3 = MovingAverage.createMovingAverage(ts1, "6 month mov.avg.", 6, 0);
      TimeSeries ts4 = MovingAverage.createMovingAverage(ts1, "12 month mov.avg.", 12, 0);
      TimeSeriesCollection ds = new TimeSeriesCollection();
      ds.addSeries(ts1);
      ds.addSeries(ts2);
      ds.addSeries(ts3);
      ds.addSeries(ts4);
      JFreeChart chart = ChartFactory.createTimeSeriesChart("Time series", "Time", "Value", ds, true, true, false);
      chart.setBackgroundPaint(Color.LIGHT_GRAY);
      XYPlot plot = chart.getXYPlot();
      XYItemRenderer renderer = plot.getRenderer();
      if (renderer instanceof XYLineAndShapeRenderer) {
          XYLineAndShapeRenderer rr = (XYLineAndShapeRenderer) renderer;
          rr.setShapesFilled(true);
          rr.setSeriesPaint(0, Color.BLACK);
          rr.setSeriesPaint(1, Color.CYAN);
          rr.setSeriesPaint(2, Color.MAGENTA);
          rr.setSeriesPaint(3, Color.ORANGE);
        }
      DateAxis axis = (DateAxis)plot.getDomainAxis();
      axis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));
      ChartPanel chartpan = new ChartPanel(chart);
      chartpan.setPreferredSize(new Dimension(600, 600));
      setContentPane(chartpan);
      pack();
      setVisible(true);
    }
}

class PieDemo extends ApplicationFrame {
    private static Random rng = new Random();
    public PieDemo() {
        super("Pie demo");
        double[] v = new double[5];
        for(int i = 0; i < v.length; i++) {
            v[i] =  rng.nextInt(1000);
        }
        DefaultPieDataset ds = new DefaultPieDataset();
        for(int i = 0; i < v.length; i++) {
            ds.setValue("Cat. " + (char)(65+i), v[i]);
        }
        JFreeChart chart = ChartFactory.createPieChart("Pie",  ds, true, true, false);
        chart.setBackgroundPaint(Color.LIGHT_GRAY);
        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setSectionPaint(ds.getKey(0), Color.RED);
        plot.setSectionPaint(ds.getKey(1), Color.GREEN);
        plot.setSectionPaint(ds.getKey(2), Color.YELLOW);
        plot.setSectionPaint(ds.getKey(3), Color.BLUE);
        plot.setSectionPaint(ds.getKey(4), Color.PINK);
        ChartPanel chartpan = new ChartPanel(chart);
        chartpan.setPreferredSize(new Dimension(400, 400));
        setContentPane(chartpan);
        pack();
        setVisible(true);
    }
}

class BarsDemo extends ApplicationFrame {
    private static Random rng = new Random();
    public BarsDemo() {
        super("Bars demo");
        double[] v1 = new double[5];
        for(int i = 0; i < v1.length; i++) {
            v1[i] =  rng.nextInt(1000);
        }
        double[] v2 = new double[5];
        for(int i = 0; i < v2.length; i++) {
            v2[i] =  rng.nextInt(1000);
        }
        DefaultCategoryDataset ds = new DefaultCategoryDataset();
        for(int i = 0; i < v1.length; i++) {
            ds.addValue(v1[i], "V1", "Cat. " + (char)(65+i));
            ds.addValue(v2[i], "V2", "Cat. " + (char)(65+i));
        }
        JFreeChart chart = ChartFactory.createBarChart("Bars", "Category", "Value", ds, PlotOrientation.VERTICAL, true, true, false);
        chart.setBackgroundPaint(Color.LIGHT_GRAY);
        CategoryPlot plot = chart.getCategoryPlot();
        CategoryItemRenderer renderer = plot.getRenderer();
        renderer.setSeriesPaint(0, Color.YELLOW);
        renderer.setSeriesPaint(1, Color.RED);
        ChartPanel chartpan = new ChartPanel(chart);
        chartpan.setPreferredSize(new Dimension(400, 400));
        setContentPane(chartpan);
        pack();
        setVisible(true);
    }
}
Avatar billede arne_v Ekspert
17. december 2007 - 15:12 #2
Det er en app og ikke en applet, men den kan nemt konverteres till applet.
Avatar billede arne_v Ekspert
17. december 2007 - 15:13 #3
import java.awt.*;
import java.text.*;
import java.util.*;

import javax.swing.*;

import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.axis.*;
import org.jfree.chart.renderer.*;
import org.jfree.data.*;
import org.jfree.data.time.*;

public class MovingAverageApplet extends JApplet {
  public void init() {
      String title = getParameter("title");
      String data = getParameter("data");
      int y1 = Integer.parseInt(getParameter("y1"));
      int m1 = Integer.parseInt(getParameter("m1"));
      int y2 = Integer.parseInt(getParameter("y2"));
      int m2 = Integer.parseInt(getParameter("m2"));
      StringTokenizer st = new StringTokenizer(getParameter("values"), ",");
      double[] x = new double[st.countTokens()];
      int ix = 0;
      while (st.hasMoreTokens()) {
        x[ix] = Double.parseDouble(st.nextToken());
        ix++;
      }
      init(title, data, y1, m1, y2, m2, x);
  }
  public void init(String title, String data, int y1, int m1, int y2, int m2, double[] val) {
      TimeSeries ts1 = new TimeSeries(data, Month.class);
      int y = y1;
      int m = m1;
      int ix = 0;
      while ((y < y2) || (m <= m2)) {
        ts1.add(new Month(m, y), val[ix]);
        m++;
        if (m > 12) {
            y++;
            m = 1;
        }
        ix++;
      }
      TimeSeries ts2 = MovingAverage.createMovingAverage(ts1, "6 month mov.avg. of " + data, 6, 0);
      TimeSeriesCollection dataset = new TimeSeriesCollection();
      dataset.addSeries(ts1);
      dataset.addSeries(ts2);
      JFreeChart chart = ChartFactory.createTimeSeriesChart(title, "Time", "Value", dataset, true, true, false);
      StandardLegend legend = (StandardLegend) chart.getLegend();
      legend.setDisplaySeriesShapes(true);
      XYPlot plot = chart.getXYPlot();
      XYItemRenderer renderer = plot.getRenderer();
      if (renderer instanceof StandardXYItemRenderer) {
        StandardXYItemRenderer rr = (StandardXYItemRenderer) renderer;
        rr.setPlotShapes(true);
        rr.setShapesFilled(true);
      }
      DateAxis axis = (DateAxis) plot.getDomainAxis();
      axis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));
      ChartPanel chartPanel = new ChartPanel(chart);
      chartPanel.setPreferredSize(new Dimension(500, 300));
      getContentPane().add(chartPanel);
      setVisible(true);
  }
}
Avatar billede arne_v Ekspert
17. december 2007 - 15:14 #4
<APPLET CODEBASE="." CODE="MovingAverageApplet.class" ARCHIVE="movavgapp.jar" WIDTH="500" HEIGHT="300">
<PARAM NAME="title" VALUE="Moving Average Demo">
<PARAM NAME="data" VALUE="test data">
<PARAM NAME="y1" VALUE="2003">
<PARAM NAME="m1" VALUE="1">
<PARAM NAME="y2" VALUE="2004">
<PARAM NAME="m2" VALUE="6">
<PARAM NAME="values" VALUE="1, 4, 9, 16, 25, 36, 30, 24, 18, 12, 6, 0, 32, 48, 56, 60, 62, 63">
</APPLET>
Avatar billede arne_v Ekspert
17. december 2007 - 15:14 #5
det var saa en aegte applet
Avatar billede kenneth_breve Nybegynder
17. december 2007 - 16:08 #6
Hej Arne.

Tak for eksemplerne.  :-)

Du ligger vel ikke inde med en smule mere simple eksempler?
Avatar billede arne_v Ekspert
17. december 2007 - 16:36 #7
Det er de simple eksempler !


Man kan lave noget rigtigt paent grafik med JFreeChart.

Men man skal skrive lidt kode.
Avatar billede kenneth_breve Nybegynder
17. december 2007 - 20:12 #8
Okay... takker Arne.

Smid et svar
Avatar billede arne_v Ekspert
17. december 2007 - 20:16 #9
svar
Avatar billede arne_v Ekspert
17. december 2007 - 20:21 #10
Du faar brug for eksemplerne, fordi de gratis docs er ikke saerligt god.

Forfatterne af JFreeChart har lavet en (antager jeg) bedre dokumentation i en bog som
saelges.

Men med lidt snille kan man google et eller andet. Og ovenstaaende burde faktisk faa
dig godt igang.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester