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
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
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ć.
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");
}
}
}
public void FunctionPicture()
//na
public FunctionPicture()
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.
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.
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.
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]);
}