Hlavní navigace

Matematika v příkazové řádce XIV

26. 4. 2006
Doba čtení: 8 minut

Sdílet

V dnešním pokračování seriálu, který je věnován matematicky zaměřeným aplikacím ovládaným zejména z příkazového řádku a/nebo z textového terminálu, si řekneme základní informace o programu gnuplot, což je, jak již ostatně samotný název této aplikace naznačuje, velmi zajímavý a přitom široce použitelný program pro tvorbu grafů, který je možné použít buď pro dávkové (neinteraktivní) vytváření grafů, jako frontend k dalším aplikacím nebo k interaktivnímu použití s podporou GUI.

Obsah

1. Vytváření dvojrozměrných i trojrozměrných grafů z příkazového řádku
2. Základní informace o aplikaci gnuplot
3. Neobejdete se bez GUI?
4. Export vytvořených grafů do podporovaných souborových formátů
5. Vytváření grafů funkcí a grafů vytvořených za pomoci externích dat
6. Platformy, které podporuje současná verze gnuplotu
7. Obsah dalšího pokračování tohoto seriálu

1. Vytváření dvojrozměrných i trojrozměrných grafů z příkazového řádku

Ve všech třinácti předchozích částech tohoto seriálu jsme se až doposud zabývali aplikacemi, které sloužily buď pro provádění numerických výpočtů (ať už interaktivním způsobem pomocí dialogu s uživatelem či programově prostřednictvím uživatelských skriptů), nebo se pomocí nich daly zpracovávat numerické informace uložené ve formě tabulek (resp. polí). Kromě tabulkového procesoru sc, který vyžadoval použití textového terminálu s adresovatelným kurzorem (to zajišťovala knihovna curses resp. ncurces), si ostatní popisované aplikace vystačily „pouze“ s příkazovým řádkem (pro malé připomenutí – jednalo se o utility bc, dc a calc, jež byly orientovány především na provádění numerických výpočtů).

V dnešní části tohoto seriálu a také v několika částech následujících si povíme základní informace o aplikaci gnuplot, která slouží k tvorbě plošných i prostorových grafů a přitom ke svému běhu vyžaduje (alespoň v základní konfiguraci, existují však mnohé nadstavby pro různá GUI) pouze příkazový řádek a ne celé grafické uživatelské rozhraní, jak bychom mohli od aplikace určené k tvorbě grafiky očekávat.

Na tvorbu grafů se můžeme dívat ze dvou uživatelských pohledů. Buď se jedná o vysoce interaktivní vytváření grafů, při kterém uživatel podle svých potřeb, nálady a estetického citu (nebo v mnoha případech spíše jeho absence :-)) mění typ grafu, způsob popisu jeho os i vlastních dat, barvy, řezy písma, přidání značek do průběhů hodnot apod. Pro tuto činnost jsou funkčně velmi dobře vybavené především tabulkové procesory (jmenujme například Calc 602, Microsoft Excel, OpenOffice.org apod.), ale i specializované programy, například v minulosti často používaný Origin. Nároky, které při takto pojaté tvorbě grafů klademe na dané aplikace, spočívají především ve velké variabilitě, ale také v okamžité či alespoň velmi rychlé zpětné odezvě aplikace na příkazy zadávané uživatelem. Velká část uživatelů vytváří grafy právě tímto způsobem a výsledkem jsou mnohdy dokumenty získané velice pracně (zkuste vytvořit 100 grafů pro 100 tabulek v tabulkovém procesoru) a v mnoha případech se také jedná o neestetická dílka hýřící barvami, spojením mnoha (nevhodných) typů grafů v jednom dokumentu apod.

Existuje však i druhý uživatelský pohled, který se pro určité činnosti hodí lépe: jedná se o tvorbu většího množství grafů, přičemž je kladen důraz především na jejich rychlé vytváření (ideálně bez zásahu uživatele) a také na vizuální kvalitu výsledků a dodržení „štábní kultury“, tj. stejného vzezření grafů v jednom dokumentu či dokonce ve všech firemních dokumentech. Tyto požadavky pro mnohé takřka ideálně splňuje aplikace gnuplot (viz www.gnuplot.in­fo), s jejíž pomocí je možné vytvářet grafy, které svou vizuální kvalitou předčí i ty nejznámější tabulkové procesory. Navíc je tuto aplikaci možné vybavit grafickým uživatelským rozhraním, které je pro mnohé uživatele příjemnější než prostý příkazový řádek.

2. Základní informace o aplikaci gnuplot

Aplikace gnuplot je určena k tvorbě plošných (2D) i prostorových (3D) grafů včetně možností vizualizace vektorových polí. Přitom se jedná o program, který je možné v celé své šíři ovládat z příkazové řádky, a to buď pomocí uživatelsky vytvořených skriptů, nebo interaktivním způsobem, tj. postupným zadáváním a následným prováděním příkazů zapsaných na standardní vstup (stdin), což většinou znamená z klávesnice, ale standardní vstup je samozřejmě možné pomocí prostředků operačního systému přesměrovat a použít místo něj například výstup z jiného běžícího procesu. Vývoj této aplikace probíhal velmi dlouho (poprvé jsem se s gnuplotem setkal v DOSu na počítačích s procesorem 386 a pouhými čtyřmi megabyty RAM – graficky se tak zpracovávaly výstupy ze simlibu) a mimo jiné i proto se dnes jedná o jeden z nejvíce propracovaných programů určených pro dávkovou tvorbu grafů (mezi další používané aplikace s podobným zaměřením patří například plotutils, což je taktéž utilita, resp. sada utilit šířených pod GNU licencí).

Mezi největší přednosti této aplikace patří především systémová nenáročnost, ať už se to týká spotřeby operační paměti nebo rychlosti provádění zadaných příkazů (gnuplot se díky tomu používá i pro dynamickou tvorbu různých typů grafů na WWW, kdy je výstup proveden většinou do rastrových obrázků GIF či PNG), široké možnosti nastavení způsobu zobrazení výsledných grafů a v neposlední řadě také podpora mnoha souborových formátů, do nichž je možné vytvořený graf uložit. Podporovány jsou formáty rastrové i vektorové grafiky, včetně výstupu do DXF, PostScriptu a dokonce i do formátu LATEXu (pro fajnšmekry je možné vytvořit vstupní soubor pro Knuthův MetaFont a graf tak zapracovat i do TEXu), což je výhodné například pro začlenění grafů do vědeckých textů.

Další předností gnuplotu je zabudování poměrně sofistikovaného příkazového jazyka, pomocí kterého je možné zadávat a spouštět makra řídící načtení dat uložených v externím souboru, vytvoření grafu a jeho uložení, resp. export do zvoleného formátu atd. gnuplot se také vyznačuje malým počtem interních chyb – to je důležité zejména při dávkovém vytváření mnoha grafů, kdy není možná jejich důsledná kontrola člověkem a musíme se spolehnout na to, že grafy budou po automatickém zpracování korektní. gnuplot je k dispozici pro mnoho platforem, zjednodušeně je možné říci, že tam, kde se rozběhne nějaký překladač ANSI C (dokonce i šestnáctibitový), je možné zprovoznit i gnuplot.

Orientace na příkazový řádek a dávkové zpracování dat dovolují gnuplot použít jako frontend pro další aplikace, určené například pro zpracování signálů, simulace (viz například už zmíněný simlib, který je mimochodem stále vyvíjený na FIT v Brně), statistiku (návštěvnost WWW stránek, vytížení datových linek) apod. Pokud tedy používáte či vytváříte aplikace „chrlící“ číselné údaje a ty následně potřebujete nějakým snadným a rychlým způsobem vizualizovat, je gnuplot v mnoha případech ideální volbou. Musíme si však uvědomit, že pro využití všech možností, které gnuplot při práci s grafy nabízí, je zapotřebí prostudovat poměrně rozsáhlou dokumentaci, která je spolu s programem dodávána (většinou ve formátu PostScript či PDF, ale je ji možné získat i v dalších formátech). Pro rychlý úvod do možností gnuplotu doporučuji stáhnout a vytisknout referenční kartu ve formátu PDF, kterou je možné získat z adresy www.gnuplot.in­fo/pub/gnuplot/gpcar­d.pdf.

V následujících kapitolách si stručně popíšeme nejvýznačnější vlastnosti této rozsáhlé aplikace.

3. Neobejdete se bez GUI?

Z předchozích odstavců by se mohlo zdát, že gnuplot nebude v dnešním světě informačních technologií, který je (alespoň v oblasti uživatelských programů) orientován především na grafické uživatelské rozhraní, konkurenceschopný, zejména při pohledu na další matematicky zaměřené aplikační balíky, například Matlab, Maple, Mathematica atd. Ve skutečnosti je však možné a mnohdy také užitečné gnuplot použít i s GUI. V současné době je podporováno mnoho platforem nabízejících grafické uživatelské rozhraní, od Amig či Atari a počítačů s operačním systémem DOS či Microsoft Windows přes počítače firmy Apple až po výkonné pracovní stanice s UNIXem a systémem X Window. Existuje také několik GUI rozhraní vytvořených pomocí Tcl/Tk – takto vytvořené nadstavby nad gnuplotem je možné použít na libovolném systému, který Tcl/Tk podporuje (jedná se především o Mac OS, Microsoft Windows, X Window systémy atd.).

4. Export vytvořených grafů do podporovaných souborových formátů

Při popisu dalších vlastností gnuplotu začněme – možná poněkud netypicky – popisem možností exportu vytvořených grafů do některých podporovaných souborových formátů. Již v předchozích kapitolách jsem se zmínil o tom, že při výstupu grafů je možné použít jak rastrové, tak i vektorové grafické souborové formáty. Oba dva typy grafických formátů jsou totiž důležité: rastrovou grafiku využijeme například při publikování grafů na Internetu, vektorová grafika se naopak hodí při přípravě publikací určených pro tisk. Mezi podporované rastrové formáty patří PBM (Portable BitMap), PNG (Portable Network Graphics – vhodné pro web), GIF (pouze s podporou dalších knihoven), JPEG apod. Z vektorových formátů je podporován především PostScript, dále je pak možné provést výstup například do LATEXu a DXF (Drawing Interchange File Format – formát podporovaný prakticky každým CAD systémem).

5. Vytváření grafů funkcí a grafů vytvořených za pomoci externích dat

Pomocí gnuplotu je možné vytvářet velké množství grafů. Mezi nejjednodušší a současně také nejpoužívanější grafy patří zobrazení průběhů funkcí s jednou závislou a jednou nezávislou proměnnou. Takové funkce se vytvoří velmi jednoduše, například obligátní sinusovka vznikne příkazem:

plot sin(x) 

Výsledný graf vytvořený po zadání výše uvedeného příkazu je zobrazen na prvním obrázku.

Math 14 1

Obrázek 1: Graf funkce jedné nezávislé proměnné

Pokud je zapotřebí na grafu vyznačit průběhy více funkcí, není nic jednoduššího, než zadat například tento příkaz:

plot sin(x)/x, sin(x)/(x**2+1) 

Jak je patrné z druhého obrázku, nastaví gnuplot automaticky i limity pro obě osy grafu. Tyto limity je však možné specifikovat i ručně či ve skriptu (to je nutné například při vytváření grafů, které se mají navzájem porovnávat).

Math 14 2

Obrázek 2: Graf dvou funkcí jedné nezávislé proměnné

Kromě grafů funkcí jedné nezávislé proměnné je však možné vytvořit složitější grafy. Na třetím obrázku je zobrazen průběh imaginární části funkce komplexní proměnné.

Math 14 3

Obrázek 3: Graf imaginární části funkce jedné nezávislé komplexní proměnné

Velká síla gnuplotu leží v jeho schopnosti zobrazit grafy sestrojené z numerických hodnot uložených v externích souborech. U dat představujících body ležící na jednorozměrné křivce či dvojrozměrné ploše je možné provést proložení bodů hladkou křivkou se zadanými vlastnostmi. Dokonce je také možné zobrazit vektorové pole, což je ukázáno na čtvrtém obrázku.

Math 14 4

Obrázek 4: Zobrazení vektorového pole

6. Platformy, které podporuje současná verze gnuplotu

Současnou verzi gnuplotu (jde o verzi 4.0.x) je možné používat na následujících platformách:

  • Sun3, sun4c, sun4m, sun4u (SunOS 4.03, SunOS 4.1.x, Solaris 2.5.1/2.6/2.7)
  • uVAX 3100 (VMS 5.4, 5.5, 6.0, 6.1)
  • VAX 6410 (VMS 5.2)
  • DECStation 5000/200PXG (ULTRIX V4.1)
  • DEC AXP 3400 (VMS/OpenVMS 1.5, 6.2)
  • DEC AXP 600, A1000A, 3000 (DEC Unix 3.2 4.0, Windows NT 4.0 MSVC++ 4.0)
  • IBM PC and compatibles (MS-DOS 3.3/5.0 32-bit DJGPP, OS/2 2.x, Linux 2.x SVGA X11, Windows 9×, ME, Windows NT, 2K, XP)
  • IBM AIX 3.x and 4.x
  • CBM Amiga (AmigaOS 1.3, 2.x and 3.x, SAS/C 6.2 and better, Aztec C beta 5.2a, gcc; Linux 2.x, NetBSD-1.3.x)
  • IRIS 4D/70G and 4D/25G with MIPS C
  • NeXT with gnu C 1.34
  • AT&T 3B1 (version 3.51m with cc and gcc 1.39)
  • Apollo's (DomainOS SR10.3 BSD4.3 with C compiler 68K Rev 6.7(316))
  • HP 300 (m68k) and HP 700 (PA-RISC) (HP-UX 9.x 10.x)
  • SGI Challenge and O2 (Irix 6.2, 6.3)

Pro počítače Atari je nutné použít některou trojkovou řadu gnuplotu, současná verze totiž není (alespoň prozatím) podporovaná.

CS24 tip temata

7. Obsah dalšího pokračování tohoto seriálu

V následující části tohoto seriálu budeme pokračovat v popisu aplikace gnuplot. Povíme si, jakým způsobem jsou zpracována a následně vykreslena data uložená v externích souborech. Vykreslení těchto dat představuje jednu z nejdůležitějších a nejpotřebnějších činností, které je možné s gnuplotem provádět.

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.