Problem z TChart

0

Witajcie. Mam problem z wykresem. Dane wejściowe do wykresu:
nr punktu X Y

  1.        1    1
    
  2.        2    1.3
    
  3.        1    0.8
    
  4.        3   5
    

Nie wiem co zrobic, co zmienic, zeby punkt nr 3 byl narysowany prawidlowo.. tzn "w lewo" i "nizej" niz poprzedni punkt..

0

Dane masz do d**y. Dla każdego X powinien istnieć tylko jeden Y.

0
Oleksy_Adam napisał(a)

Dane masz do d**y...

to zalezy...:p

zawsze mozesz uzyc dwóch serii danych i zrobic je tego samego koloru
bedzie wygladalo jak trzeba (tylko ze w 3d sie rozjedzie:-) )

0

Nie zgadzam się, że są do d... Dane które mają być przedstawione na wykresie są pomiarami z maszyny wytrzymałościowej. Ten sam wykres zrobiony w Excelu wygląda poprawnie, więc da się taki wykres sporządzić. Pytanie - jak zmusic do tego Delphi? ani zmiana z serii liniowej na punktową nie pomaga..

0

Ależ te wyniki przedstawiają funkcję wielowartościową. Jeśli są to wyniki pomiarów, to oznacza, że dla jednej wartości było dokonywane kilka pomiarów. A skoro tak - to zanim zajmiesz się rysowaniem wykresów, musisz przetworzyć dane:

dla każdego x liczysz wartość oczekiwaną y-ka, np ze średniej arytmetycznej:
dla x=1 masz: y_śr(1) = 0.9
dla każdego x liczysz błąd: np z odchylenia standardowego
dla x=1 masz: y_err(1) =0.1
i dopiero takie wyniki możesz rysować w excelu, TCharcie czy innym GnuPlocie.

Najpierw teoria dotycząca zagadnienia, a później kodowanie.

// dodane po konsultacji na gg ;)

  1. cóż, takie punkty jakie podałeś mają dość dziwny "wykres" (przez to, że jest wiele wartości dla jednego x)... W zasadzie, to nie mają wykresu, bo jak je niby połączyć? Popatrz na rysunek:
    user image
    jak ma biegnąć wykres? Ja zdecydowałem, że niebieski mi się podoba, ale inne też są przecież uprawnione - a to nie wygląda jak wykres, tylko jak jakaś kratownica... bez sensu.

  2. Zaś rysowanie samych punktów zrealizowałbym tak raczej, jak radzi Johny_Morfina. Podzieliłbym dane na kilka serii i każdą serię narysował oddzielnie. Dzielenie na serie opierałoby się na takim warunku, że w danej serii nie mogą znaleźć się dwa punkty o tej samej współrzędnej x.

  3. moim zdaniem jednak obydwa rozwiązania są do d**y, i tak naprawdę masz zobić coś takiego:
    user image
    czyli biorąc pod uwagę WSZYSTKIE punkty musisz policzyć współczynnik kierunkowy najlepiej dopasowanej prostej. Robi się to z regresji liniowej. W twoim przypadku są dwie opcje:

3.1 punkty zawsze powtarzają się tyle samo razy: nie ma problemu - liczysz średnie i błędy - wstawiasz do wzorów na regresję ważoną i po kłopocie

3.2 tylko niektóre punkty się powtarzają. Też liczysz z regresji, ale tutaj jest problem, bo jak ustalić błąd jednokrotnego pomiaru? Można by podać niepewność urządzenia pomiarowego (urządzenie zawsze ma podaną niepewność gdzieś na obudowie albo w dokumentacji), jakkolwiek mogą ci się przyczepić do takiego rozwiązania...
o regresji masz tu: http://pl.wikipedia.org/wiki/Regresja_liniowa
więcej nie wymyślę, inaczej nie wykombinuję...

@Adam: kurcze, nie wiedziałem, że macie na 4programmers art o regresji z przykładowym kodem, jestem pod wrażeniem... i nie mów mi tylko, że nie szukałem to nie wiedziałem - po co miałem szukać, skoro ja regresję znam dobrze ;)

0

Chłopaki jednak da się to zrobić!
Te dane które przedstawiłem na forum byly tylko przykładowymi...
Cały problem rozwiązuje się dwoma linijkami:

Series.XValues.Order:=IoNone;
Series.YValues.Order:=IoNone;

Co powoduje, że dane wykresu nie są SORTOWANE. Teraz wygląda jak należy.

Dziekuję Wam za pomoc i fatygę, pozdrawiam :)

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