2 3 python07112010.pdf

(852 KB) Pobierz
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”:
Zgłoś jeśli naruszono regulamin