Wykresy w JAVIE

Odpowiedz Nowy wątek
2011-04-25 15:01

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

0

Witam
Mam listę:
List<Double> dane = new ArrayList<Double>();
Chciałbym narysować wykres: Oś x: i Oś y: dane[i]

Może ktoś powiedzieć jak to zrobić? Obojętne czy wykres na konsoli czy do GUI

Dzięki

Pozostało 580 znaków

2011-04-25 17:14

Rejestracja: 9 lat temu

Ostatnio: 3 lata temu

0

to powinno ci pomóc :

http://www.developer.com/java[...]tities-of-Data-using-Java.htm

Pozostało 580 znaków

2011-04-25 18:33

Rejestracja: 16 lat temu

Ostatnio: 2 dni temu

0

http://www.jfree.org/jfreechart/


Pozostało 580 znaków

2011-04-26 08:25

Rejestracja: 12 lat temu

Ostatnio: 4 dni temu

0

Jest kilka rozwiązań po pierwsze wspomniany JFreeChart. Bardzo fajny i elastyczny. Do tego zintegrowano go już chyba ze wszystkim i jest dużo tutoriali.
Drugim niezwykle przydatnym narzędziem jest Google Chart: http://code.google.com/intl/pl/apis/chart/ Ma on ta zaletę, że nie obciąża twojego komputera/serwera ponad miarę, a tylko w zakresie potrzebnym do komunikacji z wujkiem Googlem.
Trzecim, którego używałem jest JOpenChart: http://sourceforge.net/projects/jopenchart całkiem fajny, ale od dawna nie jest rozwijany i trzeba na początek trochę posiedzieć przy kodzie i go podrasować.

Pozostało 580 znaków

2012-01-16 22:18

Rejestracja: 8 lat temu

Ostatnio: 5 lat temu

0

Witam,
Jestem bardzo początkująca... Napisałam program i kompletnie nie mam pojęcia dlaczego nie działa. Poniżej kod.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wykresy;
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.text.*;
/**
 *
 * @author Sandra
 */
public class Wykresy {
 public static int TableOfResults[][];
 public static int  Nmax, Hrozmiar;
    /**
     * @param args the command line arguments
     */

    static int select(int T[],int n) {

        int min,i,j,temp, s=0;

        for (i=0; i<49; i++)    {
            min=i;

            for (j=i+1;j<50;j++)
                        { s++;
                if (T[j]<T[min]) 
                    min=j;
            temp=T[min];
            T[min]=T[i];
            T[i]=temp;}

       }
                return s;

        }

    public static void main(String[] args){

    final int p = 100;
    final int h = 5;

    int []T;
    int []Ts;
    int [][]results;
    int IndexTs = 0;
    int TsDominate = 0;

    Random generator = new Random();

    int N;
    int LowerLimit, UpperLimit;
    int i, j, k;

    float avarage;

    JOptionPane.showMessageDialog(null, "Analiza porównacza algorytmów: CountSort i SelectSort\n");

    String Size;

    Size = JOptionPane.showInputDialog("Podaj liczbę elementów tablicy");

    String LimitLower;

    LimitLower = JOptionPane.showInputDialog("Podaj dolną granicę");

    String LimitUpper;

    LimitUpper = JOptionPane.showInputDialog("Podaj górną granicę");

    N = Integer.valueOf(Size).intValue();
    LowerLimit = Integer.valueOf(LimitLower).intValue();
    UpperLimit = Integer.valueOf(LimitUpper).intValue();

    T = new int[N];
    Ts = new int[p];
    results = new int[N][3];

    for(i = h; i<N; i=i+h)
    {   IndexTs = 0;
            for(k=1; k<=p; k++, IndexTs++)
            {   for(j=0; j<=i-1; j++)
                    T[j] =( int) (generator.nextFloat()* (UpperLimit - LowerLimit) + LowerLimit);
                    TsDominate = select(T, i);
                    Ts[IndexTs] = TsDominate;
            }

            avarage = 0;
           for(j = 0; j<=p-1; j++)
               avarage = avarage + Ts[j];
               avarage = avarage / p;

               results[i][0] = i;
               results[i][1] = (int)avarage;
               results[i][2] = (i*i-i)/2;

    }

        NumberFormat FormatLiczbyInteger = NumberFormat.getNumberInstance();
        FormatLiczbyInteger.setMinimumIntegerDigits(6);
        String ZnakowyZapisLiczby;

        System.out.println("Wyniki: koszt czasowy algorytmu Select Sort określony przez pomiar i analityczni");
        System.out.println("\t|Rozmiar tablicy|Operacje dominujące|Analityczny koszt czasowy|");

        for(j=0; j<N; j++)
        if(j%h ==0)
        {
        System.out.print("\t| ");
        ZnakowyZapisLiczby = FormatLiczbyInteger.format(results[j][0]);
        System.out.print(ZnakowyZapisLiczby);
         System.out.print("\t|\t");
        ZnakowyZapisLiczby = FormatLiczbyInteger.format(results[j][1]);
        System.out.print(ZnakowyZapisLiczby);
         System.out.print("\t\t|\t ");
        ZnakowyZapisLiczby = FormatLiczbyInteger.format(results[j][2]);
        System.out.print(ZnakowyZapisLiczby);
        System.out.print("\t| ");
        }

        System.out.println();

        TableOfResults = results;
        Nmax = N;
        Hrozmiar = h;

       FunctionPicture wykres=new FunctionPicture();
       wykres.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       wykres.setVisible(true);

    }

}

class FunctionPicture extends JFrame{

    public void FunctionPicture()
    {
        Toolkit narzedzia=Toolkit.getDefaultToolkit();
        Dimension monitor=narzedzia.getScreenSize();
        int heightMonitor=monitor.height;
        int widthMonitor=monitor.width;
        setSize(widthMonitor-50, heightMonitor-30);
        setLocation(20, 20);
        setTitle("Porównanie złożoności obliczeniowej SelectSort i CountSort");
        Container areaOfmyFrame=getContentPane();
        PaneOfPicture picture = new PaneOfPicture();
        areaOfmyFrame.add(picture);
    }

}
class PaneOfPicture extends JPanel{
    @Override
   public void paintComponent(Graphics g){
       int Xmax, Xmin, Ymax, Ymin;
       Xmax=size().width-20;
       Xmin=20;
       Ymin=20;
       Ymax=size().height-20;

       System.out.println("Wejście do paintComponent");
       super.paintComponent(g);
       Color colorOfFunction;
       colorOfFunction=Color.blue;
       g.setColor(colorOfFunction);

       g.drawLine(Xmin, Ymax, Xmax, Ymax);
       g.drawLine(Xmin, Ymax, Xmin, Ymin);

       colorOfFunction=Color.black;
       g.setColor(colorOfFunction);

       g.drawString("Rozmiar zadania n", (Xmax - 100), (Ymax - 5));
       g.drawString("Wartość kosztu t(n)", (Xmax + 10), (Ymax + 10));

       colorOfFunction=Color.BLUE;
       g.setColor(colorOfFunction);
       Font SerifBold14=new Font("SansSerif", Font.BOLD, 24);
       g.setFont(SerifBold14);
       g.drawString("Wykres kosztu czasowego t(n)", (Xmax/4), (Xmin+20));

       colorOfFunction=Color.RED;
       g.setColor(colorOfFunction);

       float scaleX, scaleY;
       scaleX = (float)(Xmax - Xmin)/ (float)Wykresy.Nmax;

       System.out.println("Skala OX" + scaleX);

       int MaxTs = 1;
       int j = 0;
        for(j=0;j<Wykresy.Nmax;j=j+Wykresy.Hrozmiar)
            MaxTs = Wykresy.TableOfResults[j][1];
            System.out.println("" + MaxTs);
            scaleY=(float)(Ymax-Ymin)/(float)MaxTs;
            System.out.println("Skala Y " +scaleY);

        for(j=0;j<Wykresy.Nmax-Wykresy.Hrozmiar;j=j+Wykresy.Hrozmiar)

        try{g.drawLine((int)(Xmin+scaleX *(Wykresy.TableOfResults[j][0])), 
                (int)(Ymax-scaleY *(Wykresy.TableOfResults[j][1])),
                (int)(Xmin+scaleX *(Wykresy.TableOfResults[j+Wykresy.Hrozmiar][0])),
                (int)(Ymax-scaleY *(Wykresy.TableOfResults[j+Wykresy.Hrozmiar][1])));

        }catch(ArrayIndexOutOfBoundsException e)
        {
            System.out.println("Error");
        }

        }

   }  

Pozostało 580 znaków

bo
2012-01-17 07:18
bo
0
  1. Dość głupio umieściłaś pytanie, mógł tu już nikt nie zajrzeć.
  2. W klasie FunctionPicture brakuje konstruktora, jest zatem używany konstruktor domyślny. Zamień
    public void FunctionPicture()
    //na
    public FunctionPicture()
  3. Program ma też inne usterki, np. bardzo często metoda select() generuje IndexOutOfBoundsException
    • nie wiadomo jakie wartości należy wprowadzać w okienkach dialogowych.

Pozostało 580 znaków

2012-01-17 10:56

Rejestracja: 8 lat temu

Ostatnio: 5 lat temu

0

Na razie nie mam możliwości sprawdzić, podanego przez Ciebie rozwiązania, ale bardzo dziękuję za odpowiedź.

Metoda select została napisana według zalecenia wykładowcy.

A napisałam w tym temacie, bo nie chciałam niepotrzebnie mnożyć wątków, przecież i tak temat, do którego dodaje się post przesuwa się na początek.

Pozdrawiam,
S.

Tak przesuwa się na początek, ale odgrzebałaś coś starego, co ma się nijak, poza tytułem, do twojego problemu. - Koziołek 2012-01-17 11:06

Pozostało 580 znaków

bo
2012-01-17 12:05
bo
0

W metodzie select() są magiczne stałe 49 i 50. Żeby metoda nie rzucała wyjątkiem w tablicy T musi być co najmniej 50 elementów, a TY nigdzie nie sprawdzasz czy tak jest.

Pozostało 580 znaków

2012-01-17 12:25

Rejestracja: 8 lat temu

Ostatnio: 5 lat temu

0

w select umieszciłam:

  static int select(int T[],int n) {

                int min,i,j,temp, s=0;

                for (i=0; i<n-1; i++)        {
                        min=i;

                        for (j=i+1;j<n;j++)
                        { s++;
                                if (T[j]<T[min]) 
                                        min=j;
                        temp=T[min];
                        T[min]=T[i];
                        T[i]=temp;}

           }
                return s;

        }

Wykres się rysuje, jeszcze muszę zrobić skalę, ale to napiszę, jeśli będę miała jakiś problem z tym.

edytowany 2x, ostatnio: Luisze4741, 2012-01-17 21:54

Pozostało 580 znaków

2012-01-17 21:54

Rejestracja: 8 lat temu

Ostatnio: 5 lat temu

0

Czy wiecie, jak w jfreechart przesłać tablicę danych do rysowania wykresu? Mam taki fragment:

   if(combobox.getSelectedItem()=="SelectSort")

      {
          for(x=0;x<Nmax-5;x=x+5)
          series.add(x, TableOfResults[x][2]);
      }

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0