Titus‘ PyX Juhendaja Gnuplot Kasutajad

link: http://alumni.cs.ucr.edu/~titus/pyxTutorial/

Mida Titus Winters

Märkus: Käesolev õpetus eeldab, teil on põhi tuttav nii Gnuplot ja Python programmeerimise keel. Ilma teatud arusaam nendest, te ei kavatse olla üsna kadunud.

Mingil hetkel, see on kindlasti juhtub. Gnuplot on imeline, kuid seal tuleb aeg, kus see lihtsalt ei ole päris võimu, et sul seda vaja on. Võib-olla soovite põhjalikult muuta nii kirved on koostatud. Võibolla sa lihtsalt tahad midagi lihtsat, näiteks muuta selle värvi, krunt joont, kuid ei muster. Võib-olla sul tõesti vaja mõned kopsakaid matemaatika sümbolid kuvatakse graafik. Mingil hetkel sa pead tabanud seina, pärast mida Gnuplot kiiresti lakkab olemast õige vastus. Mis töötab paremini sellistes olukordades?

Seal on palju vastuseid. HippoDraw on võimas ja tasuta, kuigi see on suhteliselt tundmatu. Mõned inimesed nagu XGraph. Kui te, nagu mina, on Pythoni programmeerija, siis võite olla valmis minema, vähem kasutajasõbralik, kuid rohkem kontrollitav lahendus. Kui nii, siis PyX (Hääldatakse „Piks“) on üks võimalus.

Nagu käesoleva kirjalikult (jaanuar 2006), PyX on veel pre-release tarkvara. Reklaam 0.8.1 versioon, seal on kindlasti mõned konarlikke servi. Kasutamine PyX võib väga hästi nõuavad mõned olulised poking kell Pythoni objektid, mis moodustavad PyX raames. Aga ma võin tunnistada, et see on hästi veedetud aega: see kestis umbes 3 või 4 tundi minna esimese paigaldus PyX teeniva graafikud, mis olid (minu arvates) väga hea, mida ma oleks saanud välja Gnuplot, mu tavaline go-to graphing.

Põhikasutus

Tõenäoliselt on Gnuplot kõige sagedasem asi lihtsa andmefaili kujundamisel. (Näidiste andmefailid on siin ja siin saadaval ).

gnuplot> krunt "data.dat"

fig1_gp
Kuidas me teeme PyXis samaväärse? See sõltub sellest, kui samaväärne soovid olla: nende kahe keskkonna vaikesätted on erinevad. Nii näitame kõigepealt kõige lihtsamat graafikut, mis on saadaval PyX-i jaoks, ja järgige graafikut, mis muudab graafiku Gnuplot ekvivalentiks.

alates pyx impordist *

g = graph.graphxy (laius = 8)
g.plot (graph.data.file ("data.dat", x = 1, y = 2))
g.writePDFfile ("test")

fig1_px
Märkus. PyX-il ei ole kuvamisvõimalusi, nii et peate kirjutama PDF-failidele või EPS-ile ja seejärel neid lemmikute vaatajaid nende failivormingute jaoks. 

Nende kahe krundi vahel on kolm peamist erinevust:

  1. Värv – Gnuplot vaikimisi prindib esimese proovitüki punasena, teine rohelist jms. (BTW: see on kahetsusväärne, kui umbes 3% populatsioonist on punane-roheline värviline silmapiir.) PyX vaikimisi on must ja valge.
  2. Key – Gnuplot vaikimisi määrab krüpteeringu iga rea võtme, PyX ei tee seda.
  3. Pildi suurus – Gnuplot kasutab vanade arvutimonitoride resolutsioone nagu 640×480 ja suhet 1,33: 1. PyXi vaikeväärtused on ~ 1.618: 1 kuldne suhe . (See on tõenäoliselt enamikule vähem oluline, kuid lisan selle täielikuks.)

Nüüd käsitleme neid korraga.

Võti

Võti lisamine on väga lihtne. Lihtsalt küsige graphxy-objektist selle lisamiseks:

alates pyx impordist *

g = graph.graphxy (laius = 8, key = graph.key.key ())
g.plot (graph.data.file ("data.dat", x = 1, y = 2))
g.writePDFfile ("test")

fig2_px
Tõepoolest on ebatõenäoline, et soovite sellises graafikus esitatud andmereale vaikimisi pealkirja. Gnuploti pealkirja määramine oleks:

gnuplot> krunt "data.dat" pealkiri "Minu andmed"

Sarnaselt PyXiga:

alates pyx impordist *

g = graph.graphxy (laius = 8, key = graph.key.key ())
g.plot (graph.data.file ("data.dat", x = 1, y = 2, title = "Minu andmed"))
g.writePDFfile ("test")

fig3_px
Märkus: LaTeXi trükib PyX-i teksti. Sellel on eelised ja puudused. Kui soovite oma pealkirja lisada matemaatika sümboleid, kreeka tähti jne, siis sisestage lihtsalt õige LaTeXi valem. Teisest küljest, kui soovite kasutada märgi „%“, olge ettevaatlik: see on LaTeXi kommentaar ja seega põhjustate PyXile märkimisväärset segadust. Teine asi, mida tuleb jälgida, on see, et Python võib tõlgendada LaTeXi sümboleid ebaõigesti: „Pythoni“ „\ tau“ tõlgendatakse kui „\ t“ (tabeldusmärk), millele järgneb „au“. Selle jaoks on hea lahendus Pythoni „toor-stringi“ funktsioonis: anna ette oma stringid „r“: r „\ tau“, siis ei saa escape-tähemärki laiendada.

Suhtarv

Kui soovite tõesti graafi suhet, mis on määratud 90-ndate monitori resolutsioonidega, mitte kreeka arhitektuuriga, peate muutma graafiku objekti suhet. (Ma soovitan vaikimisi jätta.)

alates pyx impordist *

g = graph.graphxy (laius = 8, suhe = 4. / 3, key = graph.key.key ())
g.plot (graph.data.file ("data.dat", x = 1, y = 2, title = "Minu andmed"))
g.writePDFfile ("test")

fig4_px

Värv

Värvi muutmine muudab tegelikult maatüki stiili. Seadistused, mis kõige paremini jäljendavad Gnuplot vaikeväärtusi, on midagi sellist:

alates pyx impordist *

g = graph.graphxy (laius = 8, suhe = 4. / 3, key = graph.key.key ())
g.plot (graph.data.file ("data.dat", x = 1, y = 2, title = "Minu andmed"),
       stiilid = [graph.style.symbol (symbolattrs = [color.gradient.Rainbow])])
g.writePDFfile ("test")

fig5_px
Siin pakume nimekirja stiilidest. Stiilid on spetsiaalsed objektid PyX-i jaoks, mida leidub graafikamoodulis. ( Pythoni käsurealt saab kasutada dir ja abi , võib siin olla väga õpetlik.) Sellisel juhul on ainus asi, mida me pakume, on sümbolite kasutamise juhend. Sümboli konstruktor võib võtta nimega argumendi symbolattrs , mis taastab atribuutide nimekirja, mida saab kasutada sümboli kuva muutmiseks. Sellisel juhul pakume gradientobjekt Gradiendiobjekti ülesandeks on värvi tagasitõmbamine, et joonistada järgmine joon sisse. Enamik gradienditest on lihtne kahevärviline gradient (teha värvi gradient’ile dir () (et näha eelmääratud valikuid), kuid Rainbow on pisut keerulisem kui see , ja annab tulemusi mitmekesisemates värvides. See ei jäljenda Gnuplot värvi valikuid täielikult, kuid see pole tõesti halb. (Ma mõtlen tõesti: kolmas värv Gnuplot on kollane?)

Mitmed maatükid

OK, et saaksime jäljendada lihtsa, ühe graafiku Gnuplot graafi. Liikumine mitmele krundile.

gnuplot> krunt "data.dat" pealkiri "Data 1", "data2.dat" pealkiri "Data 2"

fig6_gp
PyXi mitu krüptit on võrdselt lihtne:

alates pyx impordist *

# Algereguleerige graafiku objekt
g = graph.graphxy (laius = 8, suhe = 4. / 3, key = graph.key.key ())

# Need on andmeside read, mida me tahame maatükkida.  
data = [graph.data.file ("data.dat", x = 1, y = 2, title = "Data 1"),
        graph.data.file ("data2.dat", x = 1, y = 2, title = "Data 2")]

# Pane see ära 
g.plot (andmed,
       stiilid = [graph.style.symbol (symbolattrs = [color.gradient.Rainbow])])

# Kirjuta väljund
g.writePDFfile ("test")

fig6_px

Maatüki stiilid

Kuidas muuta krundi stiilid punktidest ridade või ridade punktidest?

gnuplot> krundi "data.dat" pealkirja "Data 1" ridadega, "data2.dat" pealkiri "Data 2" read punktidega 

fig7_gp

See muutub natuke keerulisemaks, kuid mitte liiga halb. Me läheme ühe joone joonistamisele korraga. See ei ole kõige lihtsam üleskutse seda teha (lisan mõne lisavaliku), kuid ma kasutan seda võimalust, et näidata ära mõned lisafunktsioonid, mida peaksite üldistama.

 
alates pyx impordist *

# Algereguleerige graafiku objekt
g = graph.graphxy (laius = 8, suhe = 4. / 3, key = graph.key.key ())

# Asetage esimene rida
g.plot (graph.data.file ("data.dat", x = 1, y = 2, title = "Data 1"),
       stiilid = [graph.style.line ([color.rgb.red,
                                 style.linestyle.solid
                                 style.linewidth.thick])])

# Asetage teine rida
g.plot (graph.data.file ("data2.dat", x = 1, y = 2, title = "Data 2"),
       stiilid = [graph.style.line ([color.rgb.green,
                                 style.linestyle.solid
                                 style.linewidth.thick])
               graph.style.symbol (symbolattrs = [color.rgb.green])])

# Kirjuta väljund
g.writePDFfile ("test")

fig7_px

Veateated

PyX-is olevate tõrgete lisamine on üsna lihtne ja võimaldab teil palju paremini kontrollida, kuidas punktid joonistatakse (koos sümbolitega või ilma, erinevad värviribade vead ja sümbolid, sümboli suurus jne).

Selles jaos kasutatakse seda andmefailina.

proovige "error.dat" 1: 2: 3 kasutades yerrorbars pealkirja "Proovid"

fig14_gp

alates pyx impordist *
g = graph.graphxy (laius = 8)

g.plot (graph.data.file ("error.dat", x = 1, y = 2, dy = 3),
       stiilid = [graph.style.errorbar (errorbarattrs = [color.rgb.red]),
               graph.style.symbol (graph.style.symbol.circle, size = 0.05,
                                  symbolattrs = [color.rgb.red])])

g.writePDFfile ("test.pdf")

fig15_px

Telje sildid ja kaalud

Jällegi on Gnuploti tavalised ja lihtsad funktsioonid, mis osutuvad PyXis peaaegu sama lihtsaks. Võimaldab meie graafikutele lisada sildid, nii et me teame, mida teljed esindavad.

gnuplot> seadista ylabel "# Roaches"
gnuplot> määrake xlabel "Aeg (päeva)"
gnuplot> krundi "data.dat" pealkirja "Data 1" ridadega, "data2.dat" pealkiri "Data 2" read punktidega 

fig8_gp
Ja samaväärne on PyXis. Ainuke asi, mida siin silma peal hoida, on LaTeXi kõned.

 
alates pyx impordist *
# Algereguleerige graafiku objekt
g = graph.graphxy (laius = 8, suhe = 4/3, key = graph.key.key (),
                  x = graph.axis.linear (title = "Aeg (päevad)"),
		  y = graph.axis.linear (title = "$ \ # $ Roaches"))

# Asetage esimene rida
g.plot (graph.data.file ("data.dat", x = 1, y = 2, title = "Data 1"),
       stiilid = [graph.style.line ([color.rgb.red,
                                 style.linestyle.solid
                                 style.linewidth.thick])])

# Asetage teine rida
g.plot (graph.data.file ("data2.dat", x = 1, y = 2, title = "Data 2"),
       stiilid = [graph.style.line ([color.rgb.green,
                                 style.linestyle.solid
                                 style.linewidth.thick])
               graph.style.symbol (symbolattrs = [color.rgb.green])])

# Kirjuta väljund
g.writePDFfile ("test")

fig8_px
Kuidas saaksime, kui tahame pisut kukkuda krundid?

gnuplot> seadista ylabel "# Roaches"
gnuplot> määrake xlabel "Aeg (päeva)"
gnuplot> seada xrange [0 kuni 35]
gnuplot> seadistus [0 kuni 105]
gnuplot> krundi "data.dat" pealkirja "Data 1" ridadega, "data2.dat" pealkiri "Data 2" read punktidega 

fig9_gp
Jällegi on PyXis väga lihtne.

 
alates pyx impordist *
# Algereguleerige graafiku objekt
g = graph.graphxy (laius = 8, suhe = 4/3, key = graph.key.key (),
                  x = graph.axis.linear (min = 0, max = 35, title = "Aeg (päevad)"),
		  y = graph.axis.linear (min = 0, max = 105, title = "$ \ # $ Roaches"))

# Asetage esimene rida
g.plot (graph.data.file ("data.dat", x = 1, y = 2, title = "Data 1"),
       stiilid = [graph.style.line ([color.rgb.red,
                                 style.linestyle.solid
                                 style.linewidth.thick])])

# Asetage teine rida
g.plot (graph.data.file ("data2.dat", x = 1, y = 2, title = "Data 2"),
       stiilid = [graph.style.line ([color.rgb.green,
                                 style.linestyle.solid
                                 style.linewidth.thick])
               graph.style.symbol (symbolattrs = [color.rgb.green])])

# Kirjuta väljund
g.writePDFfile ("test")

fig9_px

Graafiku pealkirjad

Kindlasti üks kõige vähem elegantne Gnuplot-ekvivalentide PyX, lisades pealkirja graafik on tegelikult kasutades PyX võimet lisada teksti kõikjal graafikul. Kas vaikimisi võti ei meeldi? Tee uus. Kas soovite lisada sildid graafikule õigesti? Tee seda. Kas soovite oma y-märgise jaoks vertikaalset teksti? Tehke seda käsitsi. Võimalus trükkida teksti graafile otse võib olla väga kasulik, kuid sellel on ka hind: see on aeg-ajalt natuke kohmakas.

gnuplot> seadista ylabel "# Roaches"
gnuplot> määrake xlabel "Aeg (päeva)"
gnuplot> seada xrange [0 kuni 35]
gnuplot> seadistus [0 kuni 105]
gnuplot> seatud pealkiri "Brand X Roach Saiti efektiivsus"
gnuplot> krundi "data.dat" pealkirja "Data 1" ridadega, "data2.dat" pealkiri "Data 2" read punktidega 

fig10_gp

 
alates pyx impordist *
# Algereguleerige graafiku objekt
g = graph.graphxy (laius = 8, suhe = 4/3, key = graph.key.key (),
                  x = graph.axis.linear (min = 0, max = 35, title = "Aeg (päevad)"),
		  y = graph.axis.linear (min = 0, max = 105, title = "$ \ # $ Roaches"))

# Asetage esimene rida
g.plot (graph.data.file ("data.dat", x = 1, y = 2, title = "Data 1"),
       stiilid = [graph.style.line ([color.rgb.red,
                                 style.linestyle.solid
                                 style.linewidth.thick])])

# Asetage teine rida
g.plot (graph.data.file ("data2.dat", x = 1, y = 2, title = "Data 2"),
       stiilid = [graph.style.line ([color.rgb.green,
                                 style.linestyle.solid
                                 style.linewidth.thick])
               graph.style.symbol (symbolattrs = [color.rgb.green])])

# Nüüd proovige teksti horisontaalselt keskel 
g.text (g.width / 2, g.height + 0.2, "Brand X Roach Bait efektiivsus", 
       [text.halign.center, text.valign.bottom, text.size.Large])

# Kirjuta väljund
g.writePDFfile ("test")

fig10_px

Märgistamisfunktsioonid

Üks näide, mida lugejale kaasa aitasid, olid faili poolt määratletud, kuid funktsionaalselt modifitseeritud graafikud . Näiteks Gnuplot:

krundi "data.dat" pealkirja "Data 1" rida pealkirja "Data 1"

fig16_gp
Ja see on umbes PyX-is (tänu Kipton Barrosile otsa eest):

alates pyx impordist *

# Algereguleerige graafiku objekt
g = graph.graphxy (laius = 8, suhe = 4. / 3, key = graph.key.key ())
g.plot (graph.data.file ("data.dat", x = 1, y = "$ 2/2", title = "Data 1"),
       stiilid = [graph.style.line ([color.rgb.red,
                                 style.linestyle.solid
                                 style.linewidth.thick])])
g.writePDFfile ("test")

fig16_px
Gnuploti jaoks on veel üks levinum kasutamine funktsiooni kujundamiseks, kas see on ainult matemaatiline või teie andmete jaoks kõige paremini sobiv. (Väärib märkimist, et PyX ei asenda Gnuplot „sobivad“ võimsused, kui kasutate kõige paremini sobivaid funktsioone.)

seadke xrange [0:10]
seadke yrani [0:10]

f (x) = .2 * x ** 2 - x + 1
maatükk f (x)

fig11_gp
PyX-i ekvivalent on lihtne, kui olete järginud, kuigi kindlasti rohkem kirjutades.

alates pyx impordist *
# Algereguleerige graafiku objekt
g = graph.graphxy (laius = 8,
                  key = graph.key.key (),
                  x = graph.axis.linear (min = 0, max = 10),
                  y = graph.axis.linear (min = 0, max = 10))

# Joonistage funktsioon
g.plot (graph.data.function ("y (x) = .2 * x ** 2 - x + 1"),
       stiilid = [graph.style.line ([color.rgb.red,
                                 style.linestyle.solid
                                 style.linewidth.thick])])

# Kirjuta pdf
g.writePDFfile ("test.pdf")

fig11_px
Kuidas on parameetrilisel krundil?

määrake parameeter

määrake xrange [-5: 5]
seatud yrange [-5: 5]
set trance [0:10]
unustasin klahvi

x (t) = cos (t) * t **. 5
y (t) = sin (t) * t **. 5

krunt x (t), y (t)

fig12_gp
PyXis hakkame nägema mõningast Pythoni võimust.

import matemaatika
def x (k):
    tagasi math.cos (k) * k **

def y (k):
    tagasi math.sin (k) * k **. 5

# Algereguleerige graafiku objekt
g = graph.graphxy (laius = 8,
                  x = graph.axis.linear (min = -5, max = 5),
                  y = graph.axis.linear (min = -5, max = 5))


# Joonistage funktsioon
kMin = 0
kMax = 10

# Parameeter "kontekst" on Pythoni kontekst, mis võimaldab meil
# kasutama funktsioone, mis on selles funktsioonis lokaalseadmena määratletud. VÕI
# saame muuta stringi "x, y = x (k), y (k)" keerulisemaks
# Pütoni väljend (see kantakse üle kapoti alla eval ().
g.plot (graph.data.paramfunction ("k", kMin, kMax,
                                "x, y = x (k), y (k)",
                                kontekstis = kohalikud elanikud ()),
       stiilid = [graph.style.line ([color.rgb.red,
                                 style.linestyle.solid
                                 style.linewidth.thick])])

# Kirjuta pdf
g.writePDFfile ("test.pdf")

fig12_px

Või kuidas on midagi, mida Gnuplot ei saa teha: mitme parameetrilise kõveraga erinevad vahemikud? (Gnuplot lubab ainult parameetri väärtuse t üheaegselt, nii et kõik joonistatud funktsioonid peavad olema kirjutatud sama vahemiku piires. PyXil puudub selline piirang.)

import matemaatika
def x (k):
    tagasi math.cos (k) * k **

def y (k):
    tagasi math.sin (k) * k **. 5

# Algereguleerige graafiku objekt
g = graph.graphxy (laius = 8,
                  x = graph.axis.linear (min = -5, max = 5),
                  y = graph.axis.linear (min = -5, max = 5))


# Joonistage funktsioon
kMin = 0
kMax = 10
g.plot ([graph.data.paramfunction ("k", kMin, kMax,
                                 "x, y = x (k), y (k)",
                                 kontekstis = kohalikud elanikud ()),
        graph.data.paramfunction ("k", 0, 20,
                                 "x, y = 3 + x (k), 1-y (k)",
                                 kontekst = kohalikud ())]
       stiilid = [graph.style.line ([color.gradient.RedBlue,
                                 style.linestyle.solid
                                 style.linewidth.thick])])

# Kirjuta pdf
g.writePDFfile ("test.pdf")

fig13_px
Parameetri väärtuse piisava lineaarse skaleerimisega võib Gnuplot olla koondatud graafi joonistamisse nagu ülaltoodud.

Lõppmärkused

Noh, see peaaegu teeb seda Gnuplot põhiliseks kasutamiseks. Teiselt poolt näeb see PyXi pinda peaaegu kriimustusi. Esitatavate meeleavalduste abil peaksite suutlikult teisendama kõik oma vana Gnuplot krunid uude PyX-i krundidesse ja neid tõenäoliselt muutma need protsessis palju paremaks. Üks oluline eelis on selles, et PyX on tõesti Python, seega saate (ja peaks!) Kirjutama suuri joonistusülesandeid kasutades funktsioone, silmuseid, tingimusi jne. Sel viisil saate graafikute loomiseks vajaliku koodi suurust märkimisväärselt vähendada. Plus, PyX annab teile palju suurema vabaduse stiilide, telgede jms muutmiseks. Märgistamine on võimas funktsioon. Mõnda aega uurige PyXi (kahjuks on Pythoni tõlk parim viis selle tegemiseks) ja vaadake, mis uut kasutab saate, mida te Gnuplotiga kunagi proovite proovida.