Wykresy w POOL

Wykres w POOL jest obiektem, podobnie jak żółw, wyświetlanym w oknie grafiki (głównym, lub w jednej z dodatkowych zakładek). Reprezentacja graficzna wykresu odzwierciedla zawartość zmiennej :data. Zbiór danych zawarty w tej zmiennej może zostać zobrazowany w jednym trybów (y = f(x), kolor = f(x,y), ...) zależnie od konfiguracji zapisanej w zmiennej :style. Obie zmienne, :data i :style są automatycznie inicjalizowane dla każdego wykresu.

Tworzenie wykresu

Nowy wykres jest tworzony przy pomocy instrukcji newplot i anewplot. Lista instrukcji lub funkcja użyta do inicjalizacji wykresu powinna wypełnić zmienną :data danymi oraz skonfigurować tryb i styl wyświetlania danych (początkowo zmienna :data zawiera jeden punkt: {0, 0}, wyświetlany według domyślnych wartości zmiennej :style), jak w poniższym przykładzie:

Przykład 1:

"p := newplot "FunctionPlot [
  ;instrukcje do wykonania podczas tworzenia wykresu:
  "data := genarray 720 [
    let "x 2 * m_pi * :index / 360
    let "y (radsin :x) / :x
    array :x :y
  ]
  :style,"mode := "line
  setr 0
]

;ustawienia zakresu rysowania w zakładce FunctionPlot
:functionplot_canvas_cfg,"min_x := 0
:functionplot_canvas_cfg,"max_x := 4 * m_pi
:functionplot_canvas_cfg,"min_y := -0.4
:functionplot_canvas_cfg,"max_y := 1.1

W większości praktycznych zadań wykresy korzystają z danych dostępnych w innych obiektach. Zestaw klas i funkcji dostępny w bibliotece make_plots.l ułatwia implementację inicjalizacji i uaktualnienia wykresów kilku popularnych rodzajów. Wszystkie funkcje make_XX zwracają wykresy dziedziczące z jednej klasy bazowej:

to plot_base
  to get_myself op this end
  to set_data :d "data := :d refresh end
  to set_style :name :val
    :style,:name := :val
  end
end

Zmiana (uaktualnienie) wyświetlanych danych w wykresach możliwa jest przy pomocy funkcji set_data :d, a zmiana stylu przy pomocy funkcji set_style :name :val. Funkcje make_XX używają asynchronicznych konstruktorów wykresów aby umożliwić szybkie tworzenie wielu wykresów; aby umożliwić synchronizację nowo utworzone wykresy są zwracane w postaci obietnic (funkcja get_myself) - dowolna operacja (np. print) wykonana na takiej zmiennej zapewni, że jej wartość (w tym przypadku wykres) jest gotowa do użycia.

Wykres liniowy y=f(x)

make_line :data [:c kolor] [:s 1] [:r 0] [:name "Plot]

Wykres funkcji y=f(x). Kolejne punkty danych połączone są linią. Opcjonalne parametry funkcji make_line mają następujące znaczenie: :c - kolor linii, domyślnie kolejny kolor z tablicy kolorów wykresów; :s - grubość linii; :r - rozmiar rysowania punktów danych, domyślny rozmiar 0 powoduje, że punkty danych nie są rysowane; :name - nazwa zakładki, do której dodany zostanie wykres.

Przykład 2:
Identyczny wykres jak w Przykładzie 1, wykonany przy pomocy funkcji make_line; wyświetlany zakres jest ustalony przy pomocy funkcji setrange, także dostępnej w bibliotece make_plots.l.

include "make_plots.l

"fxy := genarray 720 [
  let "x 2 * m_pi * :index / 360
  let "y (radsin :x) / :x
  array :x :y
]

"p := make_line :fxy

setrange world @ :p {0 12} {-0.4 1.1}

Zbiór punktów {x,y}

make_xy :data [:c kolor] [:s "none] [:r 0.5] [:img "fcircle] [:name "Plot]

Wykres zbioru punktów {x,y}. Punkty nie są połączone linią, a ich kolejność w zbiorze nie ma znaczenia. Właściwości punktów mogą być zobrazowane jako rozmiar lub kolor. Opcjonalne parametry funkcji make_xy mają następujące znaczenie: :c - kolor punktów, jeśli argument jest liczbą, oznacza ona indeks kolumny danych, której wartości zostaną zinterpretowane jako kolor, w przeciwnym przypadku argument powinien być tablicą składowych lub nazwą stałego koloru; :s - indeks kolumny danych interpretowaych jako rozmiar punktów względem rozmiaru maksymalnego; :r - maksymalny rozmiar punktów; :img - nazwa symbolu punktów; :name - nazwa zakładki, do której dodany zostanie wykres.

Przykład 3:

include "make_plots.l

to frnd
  let "x 90 + rnorm 90
  let "y (rnorm 1) * sin :x
  let "z abs :y
  let "u abs :z - (abs sin :x)
  op (array :x :y :z :u)
end

"d := genarray 5000 [frnd]
"p := (make_xy :d "purple 4 5 "dot)
(set_style "opacity 3) @ :p

setrange "Plot {-150 320} {-3 3}

Wykres macierzy Ay,x=f(x,y)

make_2d :data [:c kolor] [:s "none] [:r 1] [:img "patch] [:name "Plot]

Elementy macierzy mogą być liczbami lub wektorami zawierającymi więcej niż jedną cechę obrazowaną na wykresie. Macierz zapisana jest w zmiennej :data w postaci zbiorów elementów, gdzie każdy zbiór oznacza jeden wiersz macierzy. Opcjonalne parametry funkcji make_2d mają następujące znaczenie: :c - kolor elementów macierzy, jeśli argument jest liczbą, oznacza ona indeks w wektorze cech elementu, który zostanie zinterpretowany jako kolor, w przeciwnym przypadku argument powinien być tablicą składowych lub nazwą stałego koloru; :s - indeks w wektorze cech interpretoway jako rozmiar elementu względem rozmiaru maksymalnego; :r - odległość pomiędzy elementami w wierszach i kolumnach; :img - nazwa symbolu rysowanego dla każdego elementu macierzy; :name - nazwa zakładki, do której dodany zostanie wykres.

Przykład 4:

include "make_plots.l

to fmatrix :m :n
  let "mx (newarray :m newarray :n)
  for [r 1 :m] [
    for [c 1 :n] [:mx,:r,:c := (cos 0.03*:r^2) * (sin 0.02*:c^2)]
  ]
  op :mx
end

"h := 100 "w := 200
"p := (make_2d fmatrix :h :w 1)

setrange "Plot array 0 :w array 0 :h

Zmiana wyświetlanego zakresu

setrange :name :rx :ry

Funkcja pozwala zmienić zakres wyświetlany w oknie graficznym o nazwie :name (nazwa głównego okna to pool). Nowy zakres należy podać jako 2-elementowy zbiór liczb określający wartości minimalną i maksymalną, :rx dla osi X i :ry dla osi Y, tak jak w przykładach 2-4.

Automatyczne dopasowanie zakresu

autoscale :name [:axes "xy]

Wyświetlany zakres może zostać dopasowany automatycznie przy pomocy funkcji autoscale tak, by widoczne były wszystkie punkty wykresów wyświetlanych w oknie o nazwie :name. Domyślnie dopasowany zostanie zakres osi X i Y. Opcjonalny parametr :axes pozwala określić, która z osi ma zostać przeskalowana.

Przykład 5:

include "make_plots.l

"d := genarray 5000 [array rnorm 100 rnorm 150]
"p := (make_xy :d "purple "none 1)

autoscale "Plot

Zobacz także:

Żółw - wykres - obiekt
Synchronizacja wielu obiektów

newp, newplot - utwórz wykres (konstruktor synchroniczny)
anewp, anewplot - utwórz wykres (konstruktor asynchroniczny)
histogram - oblicz histogram (zawiera przykłady rysowania histogramów)

Spis treści