Lab 3: Automatyczne generowanie wykresów.

Transkrypt

Lab 3: Automatyczne generowanie wykresów.
PyX jest pakietem Pythona do grafiki wektorowej. Pozawala zatem tworzyd pliki EPS oraz PDF.
Aby go zainstalowad należy rozpakowad pakiet o nazwie PyX-0.10 do odpowiedniego katalogu.
Będzie on dostępny pod adresem: http://zsi.tech.us.edu.pl/~nowak/python/PyX-0.10.rar
Jeśli zostanie on zapisany w katalogu D:\Program Files (x86)\PyX-0.10\ to uruchamiamy konsolę (linię
poleceo CMD) i wpisujemy następującą komendę: pyton setup.py install jak na rysunku
poniżej:
Użytkownik może zatem zapisad w kodzie Pythona nawet najbardziej skomplikowaną grafikę.
W ramach pakietu mamy kilka modułów:
canvas, path, deco, style, color, connector
Text, box
Trafo, unit
graph (wliczając submodules)i graph.axis
(wliczając submodules)
epsfile
Podstawowa grafika
Formaty wyjściowe Tex/LaTex
Transformacja liniowa
Grafy, wykresy
Pliki EPS
Wszystkie te moduły zaimportujemy jedną linią kodu:
from pyx import *
Moduł path pozwala tworzyd postskryptowe ścieżki, które są blokami zawierającymi grafikę: linie
proste, kąty, figury, krzywe. Takie elementy (path) nie są ze sobą połączone, nazywamy je
podścieżkami (subpaths).
Ścieżki tworzymy używając metod: moveto, lineto, curveto.
Przykład 1:
Tworzymy ścieżkę o która jest linią prostą od punktu (0,0) do (1,1)
from pyx import *
p=path.path(path.moveto(0,0),path.lineto(1,1))
Ostatnia linia będzie równoważną do linii:
p=path.line(0,0,1,1)
Póki nie użyjemy instrukcji która by tę grafikę gdzieś zapisała nie zobaczymy efektu wykonania
powyższego kodu.
Efekt wyrysowania stworzonych elementów będzie widoczny dopiero gdy użyjemy elementu typu
Canvas (płótno).
c=canvas.canvas()
Do niego trzeba załadowad elementy typu path.
c.stroke(p)
p.writeEPSfile("line") # to spowoduje zapisanie efektu do pliku
lines.eps
p.writePDFfile("line")# to spowoduje zapisanie efektu do pliku
lines.pdf
Kod:
Będzie miał efekt następujący:
Przykład 2:
Załóżmy, że chcemy stworzyd grafikę złożoną z kilku elementów (subpaths):
cross=path.path(path.moveto(0,0),path.rlineto(1,1),path.moveto(1,0),
path.rlineto(-1,1))
a) 4 oddzielne linie
b) Jedna otwarta ścieżka
c) Jedna zamknięta ścieżka
d) Wypełniona scieżka (zamykana zawsze).
Pierwszy element (a) jest stworzony przy użyciu linii od punktu (0,0) do (1,1) ale z użyciem
metody rlineto.
Uwaga ! ważna zasada jest taka, że każdorazowo metoda moveto zaczyna nowy element grafiki,
zatem jeśli chcemy narysowad kwadrat nie powinniśmy użyd do tego następującego kodu:
rect1=path.path(path.moveto(0,0),path.lineto(0,1),
path.moveto(0,1),path.lineto(1,1),
path.moveto(1,1),path.lineto(1,0),
path.moveto(1,0),path.lineto(0,0))
ponieważ to stworzy 4 odrębne linie, i nie będzie możliwe wypełnienie tej figury.
By to było możliwe lepiej użyd następującego kodu:
rect2=path.path(path.moveto(0,0),path.lineto(0,1),
path.lineto(1,1),path.lineto(1,0),
path.lineto(0,0))
Ale uważny widz zauważy, że taki kwadrat jest nadal figurą w której w jednym rogu jest ona
niedomknięta. Zatem najwłaściwszym będzie użycie kodu:
rect3=path.path(path.moveto(0,0),path.lineto(0,1),
path.lineto(1,1),path.lineto(1,0),
path.closepath())
Dyrektywa closepath dodaje linie proste z bieżącego punktu do pierwszego punktu i następne
zamyka całą ścieżkę. To odpowiada rysunkowi (c). Wypełnienie ścieżki będzie możliwe dopiero po
użyciu następnego kodu:
c.stroke(rect2,[deco.filled([color.grey(0.95)])])
Zmiana kolorów będzie możliwa dzięki komendzie:
c.stroke(path,[deco.filled([color.rgb.green])])
Kod:
Ma efekt następujący:
Warto wspomnied także i to, że do rysowania kwadratów można użyd wprost odpowiedniej do
tego komendy: rect2=path.rect(0,0,1,1) zamiast rysowad 4 linie i je łączyd.
Przykład 3
Kod:
Da efekt:
Zaś kod:
Efekt następujący:
W ramach zajęd słuchacz powinien zaznajomid się z następującymi klasami:
class line(x0,y0,x1,y1) [linia prosta z punktu (x0, y0) do punktu (x1, y1)].
class curve(x0,y0,x1,y1,x2,y2,x3,y3) [krzywa Beziera z punktami kontrolnymi od
(x0, y0) do (x3, y3)].
class rect(x,y,w,h) *kwadrat zamknięty od lewego punktu (x, y), szerokości (w) i
wysokości (h)+
class circle(x,y,r) *okrąd o środku w punkcie (x, y) i promieniu (r)+.
Klasa CANVAS pozwala na użycie następujących jej właściwości (metod):
class canvas(attrs=[],texrunner=None)
tworzy obiekt CANVAS z atrybutami podanymi jako [attrs], który może byd instancją
[trafo.trafo],[canvas.clip],[ style.strokestyle] lub
[style.fillstyle]. Argument [texrunner+ może byd użyty do specyfikacji tekstu
metodą *text()+ domyślnie nie jest określony.
Inne metody:
draw(path,attrs) [rysuje elementy path z atrybutami]
fill(path,attrs=[]) *wypełnia obiekt path+
stroke(path,attrs=[]) [przecina element path na obiekcie canvas]
insert(item,attrs=[]) *wstawia określoną instancję canvasitem do obiektu canvas]. Przy
określonych argumentach attr item jest wstawiany jako nowa instancja canvas.
text(x,y,text,attrs=[]) [tekst] [wstawia tekst na pozycji (x,y)]
insert(texrunner.text(x,y,text,attrs))) – skrótowa wersja.
bbox() *zwraca obiekt będący zamknięciem wszystkich elementów obiektu canvas+.
writeEPSfile(file,*args,**kwargs)
writePSfile(file,*args,**kwargs)
writePDFfile(file,*args,**kwargs)
writetofile(filename,*args,**kwargs)
Grafika (wykresy) i Moduł graph
Przykład 1
Przypuśdmy, że mamy następujące dane – zapisane w pliku „dane.dat”:
Chcemy użyd tych danych by wyrysowad je na wykresie:
Efekt będzie następujący:
Klasa graphxy oraz graphxyz są częścią modułu graph.graph.
Są właściwie skrótami klasy
graphxy(xpos=0,ypos=0,width=None,height=None,ratio=goldenmean,key
=None,background
attrs=None,axesdist=0.8*unit.v_cm,xaxisat=None,yaxisat=None,**axe
s)
Pozycję wykresu określają wartości: xpos oraz ypos.
Rozmiar wykresy określają parametry: width, height, oraz ratio.
backgroundattrs jest listą atrybutów tworzących tło wykresu. ,Pozwala na dekoratory typu:
strokestyles oraz fillstyles}.
axisdist jest odległością między osiami wykresu.
Xaxisat, yaxisat określa wartości na osiach X i Y.
Przykład 2: Program na pierwiastki równania kwadratowego:
Kod następujący:
Jeśli wykonanie przebiegnie wg następującego scenariusza:
To efekt będzie następujący:
Przykład 2: Rysujemy histogramy
Dane są zapisane w pliku o nazwie „minimal.dat” i zawiera minimalne i maksymalne temperatury
w poszczególnych miesiącach:
Po wykonaniu kodu:
Efekt będzie następujący:
Zaś kod następujący:
Wywoła efekt taki:

Podobne dokumenty