Avatar billede krukken Mester
11. august 2004 - 11:43 Der er 81 kommentarer og
1 løsning

Hvordan bruger man JFreeChart?

Jeg har hentet den sidste nye version af grafer hos http://www.jfree.org/jfreechart/. Jeg skal bruge en af graferne - nemlig præcis den som hedder moving average. Er der en som kan tage den ud af hele pakker - så jeg kun få nøjagtig de filer som skal bruge. Jeg vil selv kunne angive de værdier som grafen modtager. Endvidere ville det være fedt hvis dem blev sat ind på en html-side.

Hvis dette ikke er point nok - så må I jo bare sige til.
Avatar billede arne_v Ekspert
11. august 2004 - 17:11 #1
Jeg er ikke helt sikker på hvad du egentligt har brug for.

Du downloader software og builder den.

Så tilføjer du 2 jar filer til classpath i dit projekt:
  jfreechart-0.9.20.jar
  jcommon-0.9.5.jar

Så laver du dit program. Du kan med fordel tage udgangspunkt i de demo'er
der kommer med softwaren.

Der er ingen grund til at pille noget ud.

Her er en tilrettet version af Moving Average demo eksemplet:

import java.awt.*;
import java.text.*;

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.*;
import org.jfree.ui.*;

public class MovingAverageDemo extends ApplicationFrame {
    public MovingAverageDemo(String title, String data, int y1, int m1, int y2, int m2, double[] val) {
        super(title);
        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));
        setContentPane(chartPanel);
        pack();
        setVisible(true);
    }
    public static void main(String[] args) {
        double[] x = { 1, 4, 9, 16, 25, 36, 30, 24, 18, 12, 6, 0, 32, 48, 56, 60, 62, 63 };
        MovingAverageDemo mad = new MovingAverageDemo("Moving Average Demo", "test data", 2003, 1, 2004, 6, x);
    }
}

Så vidt jeg ved er jfreechart mest til fat client (Swing GUI) og ikke til web
brug.

Imidlertid er der noget servlet support i softwaren og hvis du:
  - virkeligt vil have det som web løsning
  - du har en JSP/Servlet engine på din web server
så skal jeg gerne prøve at konvertere eksemplet til servlet.
Avatar billede krukken Mester
11. august 2004 - 18:00 #2
Jeg skal bruge det på en php-side. Den skal så på en eller anden måde kunne tage imod et dataaset, samt en overskrift(altså som parameter)
Avatar billede arne_v Ekspert
11. august 2004 - 18:04 #3
Har du JSP/servlet support på server siden (Tomcat/Resin) ?

Eller skal vi over og snakke Java applets ?
Avatar billede krukken Mester
11. august 2004 - 18:07 #4
Jeg tror helt sikker at det skal laves som en applet. Hvordan tilføjer jeg 2 jar filer til classpath i mit projekt?
Avatar billede krukken Mester
11. august 2004 - 18:08 #5
Det skal vel også være en applet hvis det skal skal includeres på en html/php side?
Avatar billede arne_v Ekspert
11. august 2004 - 18:17 #6
Hvis du havde servlet support kunne du lave:

<IMG SRC="JFServlet?x=1,2,3,4"/>

i din HTML/PHP.

Men jeg prøvet at konvertere den til applet.
Avatar billede arne_v Ekspert
11. august 2004 - 19:07 #7
Det virker nu !
Avatar billede arne_v Ekspert
11. august 2004 - 19:07 #8
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
11. august 2004 - 19:08 #9
<APPLET 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
11. august 2004 - 19:08 #10
C:\>type MANIFEST.MF
Class-Path: jfreechart-0.9.20.jar jcommon-0.9.5.jar

C:\>jar cvfm movavgapp.jar MANIFEST.MF MovingAverageApplet.class
added manifest
adding: MovingAverageApplet.class(in = 4444) (out= 2278)(deflated 48%)

C:\>jar tvf movavgapp.jar
    0 Wed Aug 11 19:12:54 CEST 2004 META-INF/
  124 Wed Aug 11 19:12:54 CEST 2004 META-INF/MANIFEST.MF
  4444 Wed Aug 11 19:11:14 CEST 2004 MovingAverageApplet.class
Avatar billede arne_v Ekspert
11. august 2004 - 19:09 #11
jfreechart-0.9.20.jar og jcommon-0.9.5.jar skal ligge i samme dir som movavgapp.jar
Avatar billede arne_v Ekspert
11. august 2004 - 19:09 #12
Tilsammen er det godt nok 1.25 MB så det er nok ikke lige til 9600 baud dialup ...
Avatar billede krukken Mester
12. august 2004 - 16:22 #13
Det har virker ikke:
C:\>type MANIFEST.MF
Class-Path: jfreechart-0.9.20.jar jcommon-0.9.5.jar

C:\>jar cvfm movavgapp.jar MANIFEST.MF MovingAverageApplet.class
added manifest
adding: MovingAverageApplet.class(in = 4444) (out= 2278)(deflated 48%)

C:\>jar tvf movavgapp.jar
    0 Wed Aug 11 19:12:54 CEST 2004 META-INF/
  124 Wed Aug 11 19:12:54 CEST 2004 META-INF/MANIFEST.MF
  4444 Wed Aug 11 19:11:14 CEST 2004 MovingAverageApplet.class
Avatar billede arne_v Ekspert
12. august 2004 - 16:24 #14
Du skal lave en fil MANIFEST.MF med det indhold.

Og du skal lave jar fil med klassen og manifestet.
Avatar billede krukken Mester
12. august 2004 - 16:26 #15
Jeg arbejder på Windows
Avatar billede krukken Mester
12. august 2004 - 16:26 #16
hvordan laver jeg en Jar fil?
Avatar billede krukken Mester
12. august 2004 - 16:32 #17
Nu har jeg gjort alt dette - men det virker ikke!
C:\>type MANIFEST.MF
Class-Path: jfreechart-0.9.20.jar jcommon-0.9.5.jar

C:\>jar cvfm movavgapp.jar MANIFEST.MF MovingAverageApplet.java
added manifest
adding: MovingAverageApplet.class(in = 4444) (out= 2278)(deflated 48%)

C:\>jar tvf movavgapp.jar
    0 Wed Aug 11 19:12:54 CEST 2004 META-INF/
  124 Wed Aug 11 19:12:54 CEST 2004 META-INF/MANIFEST.MF
  4444 Wed Aug 11 19:11:14 CEST 2004 MovingAverageApplet.class
Avatar billede krukken Mester
12. august 2004 - 16:32 #18
Der kommer bare en grå kasse
Avatar billede krukken Mester
12. august 2004 - 16:33 #19
Jeg grå ud fra t dette ska ligge på en html-side:
<APPLET 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
12. august 2004 - 16:34 #20
Ja det er den HTML som jeg formoder at dit PHP script genererer dynamisk.
Avatar billede arne_v Ekspert
12. august 2004 - 16:34 #21
Du har fået lavet en jar fil some indeholder det rigtige manifest og class filen ?

Og du har compilet med -target 1.1 hvsi du bruger Microsoft JVM i IE ?
Avatar billede krukken Mester
12. august 2004 - 16:40 #22
koden ligger bare på en ganske almindelige htmlside ligenu - da jeg lige vil teste dem på min egen pc:-)
Avatar billede krukken Mester
12. august 2004 - 16:41 #23
jeg har i hvert fald fået lavet den movavapp.jar - og det ligner det resultat som du har angivet her på siden
Avatar billede arne_v Ekspert
12. august 2004 - 16:41 #24
Jeg har også testet med en statisk HTML side.
Avatar billede krukken Mester
12. august 2004 - 16:41 #25
jeg bruger j2sdk1.4.2_04 ligenu
Avatar billede arne_v Ekspert
12. august 2004 - 16:42 #26
Den indeholder både klasse og manifest ?

Og APPLET tag refererer til den ?

Og de 2 JFree jar filer ligger i samme dir ?
Avatar billede krukken Mester
12. august 2004 - 16:46 #27
alle filer ligger i samme dir!
Avatar billede arne_v Ekspert
12. august 2004 - 16:49 #28
Check hvad der står af fejl i java console.

Det må give et hint om hvor det går galt.

Check også at indholdet af jar filen er korrekt (med jar tvf kommandoen).

Og check at alle filnavne er stavet rigtigt.
Avatar billede krukken Mester
12. august 2004 - 17:01 #29
I consolen? Det kommer da ikke noget console frem?
Avatar billede krukken Mester
12. august 2004 - 17:02 #30
Altså jeg regner med at det startes idet jeg "åbner" html-filen?
Avatar billede arne_v Ekspert
12. august 2004 - 17:04 #31
Nej.

Men du kan åbne den !

Når der starter en applet så kommer der en lille kop Java nede i højre hjørne
af task baren.

Hvis du højreklikker på den kan du åbne Java Console.

der komemr alle fejl meddeleser fra applet JVM !
Avatar billede krukken Mester
12. august 2004 - 17:04 #32
Men min fil hedder også stadigvæk MovingAverageDemo.java. Jeg tror at den allerede var compilet?
Avatar billede krukken Mester
12. august 2004 - 17:06 #33
Hvis jeg compiler almindeligt med javac får jeg utrolig mange fejl
Avatar billede arne_v Ekspert
12. august 2004 - 17:07 #34
javac -classpath jfreechart-0.9.20.jar;jcommon-0.9.5.jar  MovingAverageDemo.java
Avatar billede arne_v Ekspert
12. august 2004 - 17:08 #35
Og det er .class og ikke .java filen som skal være i .jar filen !
Avatar billede krukken Mester
12. august 2004 - 17:11 #36
Der kommer slet ikke nogen kaffekop frem
Avatar billede krukken Mester
12. august 2004 - 17:12 #37
og nu er det MovingAverageDemo.java compilet uden fejl
Avatar billede krukken Mester
12. august 2004 - 17:14 #38
:jar tvf movavgapp.jar
    0 Thu Aug 12 16:34:50 CEST 2004 META-INF/
  124 Thu Aug 12 16:34:50 CEST 2004 META-INF/MANIFEST.MF
  2558 Thu Aug 12 16:20:48 CEST 2004 MovingAverageApplet.java


Det er også MovingAverageApplet.java jeg har compilet(bare så du ikke tror at det er det som er fejlen! Altså har jeg ikke en fil som hedder MovingAverageDemo.java - det var en skrive fejl fra min side:-))
Avatar billede arne_v Ekspert
12. august 2004 - 17:15 #39
Det er class filen der skal ind i jar filen ikke java filen.
Avatar billede krukken Mester
12. august 2004 - 17:21 #40
Så nu virer det sku sorry for the trouble!!! Jeg takker mange gange
Avatar billede arne_v Ekspert
12. august 2004 - 17:28 #41
Herligt !

Der er jo en milliard muligheder i JFreeChart men nu har du da et udgangspunkt
for at tilrette.
Avatar billede krukken Mester
12. august 2004 - 17:35 #42
Ja - det er fedt. Jeg siger rigtig mange tak! Det er sku fedt at der er sådan nogle som dig her på Eksperten. Du er nærmest den enest som kan give et ordentlig svar. Mange andre søger lige lidt her på eksperten eller google, og uden at vide en klap om hvad de poster, så bare indsætter en link! Tak for hjælpen
Avatar billede krukken Mester
22. oktober 2004 - 14:46 #43
arne_v? Hvordan var det jo compilede som jeg fik MovingAverageApplet.class? Jeg får en million fejl?
Avatar billede arne_v Ekspert
22. oktober 2004 - 14:49 #44
Virker 12/08-2004 17:07:52 ikke ?
Avatar billede krukken Mester
22. oktober 2004 - 15:07 #45
Jo - det virker perfekt:-)

Gider du at ligget et svar her: http://eksperten.dk/spm/552728?
Avatar billede arne_v Ekspert
22. oktober 2004 - 15:11 #46
done
Avatar billede krukken Mester
22. oktober 2004 - 15:14 #47
He he - du har også fået dine point:-)
Avatar billede krukken Mester
22. oktober 2004 - 15:21 #48
Findes der en form for dokumentation over de klasse som JFreechar indeholder? Altså så man foreksemåel ved hvilke parametre den forskellige data tager?
Avatar billede arne_v Ekspert
22. oktober 2004 - 15:24 #49
Jeg mener da at JFreeChart kommer med dokumentation.

Er der ikke et doc eller apidoc directory i JFreeChart directory ?

(jeg kan først checke selv i aften når jeg kommer hjem)
Avatar billede krukken Mester
22. oktober 2004 - 15:34 #50
Nej - det tror jeg ikke- Jeg kan i hvert fald ikke finde noget:-( Hmm - ikke sjovt at skulle gætte sig frem til koden.
Avatar billede arne_v Ekspert
22. oktober 2004 - 15:36 #51
Jeg checker når jeg er hjemme om en halvanden times tid.
Avatar billede arne_v Ekspert
22. oktober 2004 - 15:41 #52
Jeg downloadede lige her på arbejde.

Det er "gør det selv" !

Åben en DOS box, gå ned i ant directory og kør ant (forudsætter naturligvis
at du har ant installeret !!), så får du docs !

Alternativt kan du jo kigge i source koden !!
Avatar billede krukken Mester
22. oktober 2004 - 15:45 #53
sourcekode? Jeg har jo kun .classfiler. Dem kan man da ikke se noget fornuftigt i?

Hvad er ant?
Avatar billede arne_v Ekspert
22. oktober 2004 - 15:51 #54
Jeg hentede en jfreechart-0.9.21.zip på 3.6 MB - den kom skam med source kode
Avatar billede arne_v Ekspert
22. oktober 2004 - 15:53 #55
ant er et build tool som svarer lidt til make hvis du kender det

Meget anvendt i professionel sammenhæng for Java

(det er også porteret til .NET som NANT)
Avatar billede arne_v Ekspert
22. oktober 2004 - 15:54 #56
Jeg har faktisk skrevet en artikel om ant:
  http://www.eksperten.dk/artikler/54

(anmeldelserne af den artikel er ikke specielt god, men ...)
Avatar billede krukken Mester
22. oktober 2004 - 15:57 #57
Hmm - jeg hentede også lige en nye version, der var også source med. :-)

med ant bliver der så genereret et bibliotek med .html-filer? Altså er der mulighed for at du vil sende dem til mig hvis du har lavet dem?
Avatar billede arne_v Ekspert
22. oktober 2004 - 16:00 #58
Ja.

Standard javadoc som tager alle .java source code filerne og
genererer .html dokumentation ud fra dem.

Jeg kan sagtens sende dem til dig.
Avatar billede krukken Mester
22. oktober 2004 - 16:03 #59
Det ville være så lækkert:-)

Du må meget gerne sende hele dokumentation til theonlyone43221@hotmail.com
Avatar billede arne_v Ekspert
22. oktober 2004 - 16:27 #60
Kommer senere
Avatar billede krukken Mester
22. oktober 2004 - 16:30 #61
Okay - mange tak:-)
Avatar billede arne_v Ekspert
22. oktober 2004 - 18:44 #62
mail sendt
Avatar billede arne_v Ekspert
22. oktober 2004 - 18:45 #63
Avatar billede arne_v Ekspert
22. oktober 2004 - 20:14 #64
mail bounced

Diagnostic-Code: smtp;552 5.2.3 This message is larger than the current system limit or the recipient's mailbox is full. Create a shorter message body or remove attachments and try sending it again.
Avatar billede arne_v Ekspert
22. oktober 2004 - 20:17 #65
Avatar billede krukken Mester
25. oktober 2004 - 12:31 #66
Tak - skal du have:-)

Jeg har lige et enkelt spørgsmål.

TimeSeries ts2 = MovingAverage.createMovingAverage(ts1, "6 month mov.avg. of " + data, 6, 0);

Så vidt jeg kan finde frem til - er det her gennemsnitet bliver udregnet:-) Men jeg har ændret lidt i koden, og nu ligger graferne ovenpå hinanden. Det synes jeg er rimligt mærkeligt. (istedet for 6 har jeg brugt længden af x)
Avatar billede krukken Mester
25. oktober 2004 - 12:57 #67
Det virker lidt som om funktionen ikke udregner et gennemsnit - men bare angiver værdierne. Og det forstå jeg ikke.

Det 6 angiver hvormange punkter gennemsnitsgrafen skal have, men det betyder jo ikke at de vil komme til at ligge ovenpå hinanden selvom begge grafer har samme antal punkter.
Avatar billede krukken Mester
25. oktober 2004 - 12:57 #68
Dette er min kode:
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.*;
import java.util.Date;


public class Graph extends JApplet {
   
    private String name;
    private int mode;
    private String title;
    private double x[];
    private String data;
    private String unit;
    private long Start;
    private long End;
    private int average;
   
    public void init() {
        title = getParameter("title");
        unit = getParameter("unit");
        name = getParameter("name");
        data = getParameter("data");
        mode = Integer.parseInt(getParameter("mode"));
        Start = Long.parseLong(getParameter("start"));
        End =Long.parseLong(getParameter("end"));
        StringTokenizer st = new StringTokenizer(getParameter("values"), ",");
        x = new double[st.countTokens()];
        for(int ix = 0;st.hasMoreTokens();ix++)
        {
            x[ix] = Double.parseDouble(st.nextToken());
        }
        TimeSeries ts1 = new TimeSeries(unit, Minute.class);
        long interval = (End - Start)/x.length;
        for(int i = 0;i < x.length;i++)
        {
            ts1.add(new Minute(new Date(Start)), x[i]);
            Start = Start + interval;         
        }
        if(x.length%2 == 0)
        {
            average = x.length/2;
        }
        else
        {
            average = (x.length -1)/2;
        }
        System.out.println(""+average);
        TimeSeries ts2 = MovingAverage.createMovingAverage(ts1, "Avg. of " + data+ " in "+unit , this.x.length, 0);
        TimeSeriesCollection dataset = new TimeSeriesCollection();
        //dataset.addSeries(ts1);
        dataset.addSeries(ts2);
       
        JFreeChart chart = ChartFactory.createTimeSeriesChart(title, "Time", data, 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();
        switch (mode)
        {
            case 1:
            case 2:
                axis.setDateFormatOverride(new SimpleDateFormat("HH:mm"));   
                break;
            case 3:
                axis.setDateFormatOverride(new SimpleDateFormat("dd.MM"));   
                break;
            case 4:
                axis.setDateFormatOverride(new SimpleDateFormat("ww-MM"));   
                break;
            case 5:
                axis.setDateFormatOverride(new SimpleDateFormat("MM-yy"));   
                break;
            case 6:
                axis.setDateFormatOverride(new SimpleDateFormat("yyyy"));   
                break;   
            default:
                axis.setDateFormatOverride(new SimpleDateFormat("mm"));   
                break;
               
        };
        ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new Dimension(500, 300));
        getContentPane().add(chartPanel);
        setVisible(true);
    }
}
Avatar billede krukken Mester
25. oktober 2004 - 13:00 #69
Det betyder heller ikke noget meget jeg ændre det 6 tal - det forbliver den samme graf.
Avatar billede arne_v Ekspert
25. oktober 2004 - 13:08 #70
6 er vel det interval den laver moving average over. Jo større tal
jo mere udjævnet kurve.
Avatar billede arne_v Ekspert
25. oktober 2004 - 13:09 #71
Jeg tilfældigvis beskæftiget mig meget med moving average for 15-20 år siden.
Avatar billede krukken Mester
25. oktober 2004 - 13:11 #72
okay - men får var 6 hardkodet ind i koden, og nu får den 11 - og grafen er den sammen. Selvom jeg gider den 1 - forbliver grafen den samme. Jeg forstår det var ikke.
Avatar billede krukken Mester
25. oktober 2004 - 13:15 #73
Nu har jeg prøvet at sætte 6=100:-) Men det giver stadigvæk den samme graf. Det virker nærmeste som om - den createMovingAverage-funktion ikke virker(eller jeg gider den noget forkert med:-) )
Avatar billede arne_v Ekspert
25. oktober 2004 - 13:19 #74
Enten bør der være mindre udsving i kurven eller anden skala på Y aksen, når
du øger intervallet.

Intervallet skal være noget mindre end antal observationer for at det giver
mening.

Jeg kan selv checke i aften.
Avatar billede krukken Mester
25. oktober 2004 - 14:55 #75
Hej igen,

Jeg har fundet ud at noget lidt foruroligende.

Hvis jeg sætter den plads hvor der før stod 6 til 1000 eller over, så kan den anden graf pludselig ses.

Men jeg forstår bare ikke at det virkede med 6 før, og nu skal den være over 1000?

Men jo større den er - jo mere præcist ikke?
Avatar billede arne_v Ekspert
25. oktober 2004 - 19:25 #76
Jeg har lige testet lidt.

      TimeSeries ts2 = MovingAverage.createMovingAverage(ts1, "3 month mov.avg. of " + data, 3, 0);
      TimeSeries ts3 = MovingAverage.createMovingAverage(ts1, "6 month mov.avg. of " + data, 6, 0);
      TimeSeries ts4 = MovingAverage.createMovingAverage(ts1, "12 month mov.avg. of " + data, 12, 0);

Resulatet:

http://www.vajhoej.dk/arne/eksperten/temp/ma.jpg

Hvilket ser perfekt ud i mine øjne !
Avatar billede arne_v Ekspert
25. oktober 2004 - 19:26 #77
Tallet angiver over hvor stort et interval man udregner gennemsnittet.
Avatar billede krukken Mester
25. oktober 2004 - 19:30 #78
Okay - jeg må sige at det ser anderledes ud hos mig. Jeg skal minimun angives et tal på 1000 for at det virker. Man kan det have noget at gøre med at jeg sekunder på akserne? Også konverteter det til timer, dage, måneder og år.
Avatar billede arne_v Ekspert
25. oktober 2004 - 20:01 #79
"interval længde" og "antal units mellem første og sidste observation" skal
på en eller anden måde matche.

Så hvis du har f.eks. 1 million sekunder mellem første og sidste observation,
så skal du nok vælge et rimeligt stort moving average interval.

Jeg har kun 18 måneder mellem første og sidste observation, så jeg skal bruge
et lille moving average interval.
Avatar billede arne_v Ekspert
25. oktober 2004 - 20:02 #80
Hvormeget kender du til tids serie analyse og moving average ?
Avatar billede krukken Mester
25. oktober 2004 - 20:04 #81
Ingenting:-)

Men har jeg ret i at grafen ikke bliver forkert hvis intervallængeden er stor? (og den kan ikke blive for stor?)
Avatar billede arne_v Ekspert
25. oktober 2004 - 20:09 #82
Det er ikke særligt veldefineret hvad "forkert" er i denne sammenhæng.

Jo længere interval jo mere udjævnet.

Det giver ikke meget mening med et interval større end forskellen på første og sidste
observation.

Ofte bruger man det til sæson udjævning og så vil man have et interval på 12
for måneds tal, 4 for kvartals tal etc..
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