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 [
"data := genarray 720 [
let "x 2 * m_pi * :index / 360
let "y (radsin :x) / :x
array :x :y
]
:style,"mode := "line
setr 0
]
: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