original in en Baybora Baran and Seckin Gokaltun
en to de Hermann-Josef Beckers
Wir sind zwei Forschungsassistenten am Institut für Informatik der ITU. Wir arbeiten mit Ingenieur-Anwendungen an Computern und benutzen dafür Linux ... Seckins Webseite findet sich auf www.be.itu.edu.tr/~seckin
Die PGPLOT-Bibliothek ist ein aus Fortran oder C aufrufbares, geräteunabhängiges Grafikpaket zum Erstellen einfacher wissenschaftlicher Graphen. Es ist gedacht zum Erzeugen grafischer Bilder in Publikationsqualität mit minimalem Aufwand. Für die meisten Anwendungen kann das Programm geräteunabhängig sein und die Ausgabe wird erst zur Laufzeit auf das passende Gerät umgeleitet.
Die PGPLOT-Bibliothek besteht aus zwei Hauptteilen: einem geräteunabhänigen Teil und einer Menge an geräteabhängigen``Gerätetreiber''-Subroutinen für die Ausgabe auf verschiedene Terminals, Bildanzeigen, Dotmatrix-Drucker, Laserdrucker und Stiftplotter. Die Unterstützung für allgemeine Dateiformate umfasst PostScript und GIF. PGPLOT selbst ist überwiegend in Standard-Fortran-77 geschrieben.
PGPLOT-Subroutinen können direkt aus einem Fortran-77- oder Fortran-90-Programm aufgerufen werden. Eine Bibliothek mit C-Bindungen (cpgplot) und eine Header-Datei (cpgplot.h) werden bereitgestellt, damit PGPLOT direkt aus einem C- oder C++-Programm aufgerufen werden kann; die Bibliothek übernimmt die Konvertierung zwischen C und Fortran. PGPLOT wurde mit UNIX (fast alle Varianten, einschließlich Linux, SunOS, Solaris, HPUX, AIX und Irix) und OpenVMS-Betriebssystemen getestet.
PGPLOT ist keine Public-Domain-Software. Für nichtkommerzielle Nutzung ist es jedoch frei verfügbar. Der Quellcode und die Dokumentation unterliegen dem Copyright des California Institute of Technology mit einigen wenigen nicht-Standard-, systemabhängigen Subroutinen. Zum Abruf der Installationsdatei und Instruktionen klicken Sie einfach hier.
Nachstehend präsentieren wir einige einfache Beispiele für PGPLOT-Anwendungen, um die Fähigkeiten von PGPLOT zu demonstrieren.
![[Example1]](../../common/images/article268/example1.gif)
![[Example2]](../../common/images/article268/example2.gif)
![[Example3]](../../common/images/article268/example3.gif)
![[Example4]](../../common/images/article268/example4.gif)
![[Example5]](../../common/images/article268/example5.gif)
/usr/local/src/pgplot (Distributions-Verzeichnis)
/usr/local/pgplot (Ziel-Verzeichnis)
cd pub/pgplot
binary
hash
get pgplot5.2.tar.gz
tar-Datei enthalten.
ftp://ftp.astro.caltech.edu/pub/pgplot/pgplot5.2.tar.gz.
gunzip und tar zum Entkomprimieren und Extrahieren des Archives. Damit wird das Verzeichnis pgplot (einschließlich Unterverzeichnissen) im aktuellen Verzeichnis erstellt. Stellen Sie sicher, das Ihr aktuelles Verzeichnis dasjenige ist, in dem Sie den ``PGPLOT-Distributions''-Verzeichnisbaum erstellen wollen.
cd /usr/local/src
gunzip -c pgplot5.2.tar.gz | tar xvof -
/usr/local/src/pgplot und die Unterverzeichnisse.
mkdir /usr/local/pgplot
Erstellen Sie die PGPLOT-Bibliothek nicht im Distributionsverzeichnis.drivers.list aus dem Distributionsverzeichnis in das Zielverzeichnis und benutzen Sie dann einen Editor, um die Gerätetreiber auszuwählen. Diese Datei enthält eine Zeile für jeden verfügbaren Gerätetreiber: löschen Sie das Ausrufezeichen (!) am Anfang der Zeile, um den Treiber zu selektieren oder stellen Sie sicher, dass ein Ausrufezeichen vorhanden ist, wenn Sie den Treiber nicht benutzen wollen. Viele der Treiber können nur mit bestimmten Betriebssystemen benutzt werden (siehe die Hinweise in drivers.list), daher sollten Sie nur die Treiber selektieren, die Sie auch benutzen wollen. PGPLOT kann später neu konfiguriert werden, indem die Installation an dieser Stelle neu aufgenommen wird. Die meisten Installationen sollten enthalten: das Null-Gerät (/NULL), PostScript-Drucker (/PS, /VPS, /CPS, und /VCPS), Tektronix-Terminal (/TEK, /XTERM, und
evtl. andere Varianten), und, falls das X Window-System auf dem Zielrechner verfügbar ist, auch die X Window-Treiber (/XWINDOW, /XSERVE). Vielleicht möchten Sie auch Treiber für GIF-Dateien (/GIF, /VGIF) oder einige der anderen Drucker aktivieren.
cd /usr/local/pgplot
cp /usr/local/src/pgplot/drivers.list .
vi drivers.list (oder benutzen Sie Ihren Lieblingseditor)
makemake, um ein Standard-UNIX-makefile für Ihr Betriebssystem, Ihren Compiler und die ausgewählten PGPLOT-Gerätetreiber zu erstellen. Betriebssstem- und Compilerinformation werden aus einer Konfigurationsdatei genommen. Konfigurationsdateien sind für die folgenden Systeme vorhanden. Wenn Ihre Konfiguration keine der aufgeführten ist oder Sie Schwierigkeiten mit der erstellten makefile-Datei haben, finden Sie unten Informationen über die Erstellung Ihrer eigenen Konfigurationsdatei. f77 den GNU g77-Compiler aufruft, können Sie keine Konfigurationsdatei benutzen, die z. B. für einen SPARC f77-Compiler erstellt wurde. In der folgenden Tabelle ist Arg#2 ein Code für das Betriebssystem, und Arg#3 ist ein Code für die Fortran- und C-Compiler. Für weitere Informationen zu den unterstützten Systemen siehe pgplot/sys_*/aaaread.me, wobei * für eine der Optionen für Arg#2 steht.
Arg#2 Arg#3
------ ------
aix xlf_cc
alliant fortran_cc
bsd g77_gcc
convex fc_cc
cray cf77_cc
epix2 f77_cc (Control Data EP/IX 2.x)
freebsd f77_cc
fujitsu uxpm_frt_cc
fujitsu uxpv_frt_cc
hp fort77_c89
hp fort77_gcc
irix f77_cc
linux absoft_gcc
linux f77_gcc
linux g77_elf
linux g77_gcc
next af77_cc
next f2c_cc
next g77_cc
next gf77_cc
osf1 f77_cc
osf1 f77_cc_shared
sol2 f77_cc (Solaris 2.x, SunOs 5.x)
sol2 f77_gcc
sol2 f90_cc
sol2 g77_gcc
sun4 f77_acc (SunOS 4.x)
sun4 f77_cc
sun4 f77_gcc
ultrix f77_cc
Wenn Ihr System eines der aufgeführten ist, gehen Sie wie folgt vor: Machen Sie das Zielverzeichnis zu Ihrem aktuellen Verzeichnis, z.B.
cd /usr/local/pgplot
Führen Sie das Skript makemake aus dem Distributionsverzeichnis aus, z. B.
/usr/local/src/pgplot/makemake /usr/local/src/pgplot linux
Das erste an makemake übergebene Argument ist der Name des Distributionsverzeichnisses. Beachten Sie, dass, wenn Sie makemake starten, Ihr akuelles Verzeichnis das Zielverzeichnis sein sollte, d. h. das Verzeichnis, in dem Sie die kompilierte Bibliothek ablegen wollen drivers.list nicht finden kann. Zurück zu Schritt 4!
Beispiel
baybora@bilgi>../pgplot/makemake ../pgplot linux g77_gcc
For additional information, read file ../pgplot/sys_linux/aaaread.me
Reading configuration file: ../pgplot/sys_linux/g77_gcc.conf
Selecting uncommented drivers from ./drivers.list
Found drivers NUDRIV PSDRIV XWDRIV
Creating make file: makefile
Determining object file dependencies.
makemake generiert die Datei makefile zur weiteren Benutzung, eine Fortran-Datei grexec.f , die alle ausgewählten Gerätetreiber enthält und eine Textdatei rgb.txt, die Farbdefinitionen zur Benutzung durch die Routine PGSCRN enthält. (Wenn Sie bereits eine Datei rgb.txthaben, evtl. schon mit Ihren eigenen angepaßten Definitionen, wird makemake diese nicht verändern.) Es kopiert außerdem zwei Fortran-include-Dateien, die während der Kompilierung benötigt werden. Zu diesem Zeitpunkt haben Sie also mindestens die folgenden Dateien im Verzeichnis:
drivers.list
grexec.f
grpckg1.inc
makefile
pgplot.inc
rgb.txt
makemake gefunden wurden, mit der übereinstimmt, die Sie in der Datei drivers.list ausgewählt haben. Wenn Ihr UNIX-System keines der oben aufgeführten unterstützten Systeme ist, erstellen Sie Ihre eigene Konfigurationsdatei mit dem Namen local.conf im Zielverzeichnis. Am besten kopieren Sie eine der in pgplot/sys_*/*.conf bereitgestellten Konfigurationsdateien und editieren diese entsprechend der Kommentare in der Datei. Die makemake-Prozedur wird die Datei local.conf benutzen, wenn sie im aktuellen Verzeichnis existiert und Sie Arg#3 nicht angeben. Beachten Sie, dass Sie trotzdem noch Arg#2 (Betriebssystem) angeben müssen.
make-Befehl, um die PGPLOT-Bibliothek entsprechend der Anweisungen in der Datei makefile zu kompilieren:
make
Standardmäßig erstelltmake: eine Objektmodul-Bibliothek, libpgplot.a; eine Laufzeit-Bibliothek (falls auf dem gewählten Betriebssystem möglich), die binäre PGPLOT-Schriftendatei grfont.dat, die Beispielprogramme pgdemo*, und eine Dokumentationsdatei pgplot.doc. Zusätzlich, falls in Schritt 4 die Treiber /XWINDOW und/oder /XSERVE ausgewählt wurden, generiert es ein Programm pgxwin_server, und wenn der /XDISP-Treiber selektiert wurde, auch ein Programm pgdisp. Wenn dieser Schritt erfolgreich verläuft, könnten Sie nun eintippen:
make clean
um nicht benötigte Zwischendateien zu entfernen. Danach haben Sie die folgenden Dateien im aktuellen Verzeichnis:drivers.list
grexec.f
grfont.dat (binäre Schriftendatei)*
libpgplot.a (PGPLOT-Bibliothek)*
libpgplot.so (Laufzeit-Bibliothek, optional)*
makefile
pgdemo1 ... pgdemo16 (Demonstrations-Programme)
pgdisp (erforderlich für den /XDISP-Treiber)*
pgplot.doc (ASCII-Dokumentations-Datei)
pgxwin_server (erforderlich für den /XWINDOW-Treiber)*
rgb.txt (Datenbank für Farbnamen)*
pgmdemo (ausführbares Demo-Programm)
libXmPgplot.a (Objekt-Bibliothek, erforderlich für PGPLOT/Motif-Anwendungen)*
XmPgplot.h (header-Datei, erforderlich für PGPLOT/Motif-Anwendungen)*
libtkpgplot.a (Objekt-Bibliothek, erforderlich für PGPLOT/Tk-Anwendungen)*
pgtkdemo (ausführbares Demo-Programm)
pgtkdemo.tcl (vom Demo-Programm benutztes Skript)
tkpgplot.h (header-Datei, erforderlich für PGPLOT/Tk-Anwendungen)*
PGPLOT_DIR korrekt definiert ist. Dies ist der Name des Verzeichnisses, in dem PGPLOT nach den Dateien grfont.dat und rgb.txt sucht (soweit nicht die Umgebungsvariablen PGPLOT_FONT und
PGPLOT_RGB definiert sind, die dieses Standardverhalten abändern), und, falls erforderlich, auch nach dem X-window Server-Programm
pgxwin_server:
UNIX csh or tcsh: setenv PGPLOT_DIR /usr/local/pgplot/
UNIX sh or bash: PGPLOT_DIR="/usr/local/pgplot/"; export PGPLOT_DIR
PGPLOT_DEV zu setzen, z. B.
UNIX csh or tcsh: setenv PGPLOT_DEV /xwindow
Wenn Sie eine UNIX-Laufzeit-Bibliothek (z. B. unter Solaris 2.x) benutzen, könnte es erforderlich sein, das PGPLOT-Verzeichnis in den Suchpfad des Laders aufzunehmen, der in der UmgebungsvariablenLD_LIBRARY_PATH gesetzt wird. Um ein Programm zu starten, geben Sie dessen Namen ein (mit dem Verzeichnispfad, falls das aktuelle Verzeichnis nicht in Ihrem Pfad enthalten ist):
./pgdemo1
Alle Beispielprogramme fragen nach einem Gerätenamen und -Typ. Geben Sie ein Fragezeichen? ein, um eine Liste der verfügbaren Gerätetypen zu sehen und zu verifizieren, dass PGPLOT richtig konfiguriert wurde. Was Sie prüfen sollten: dass das PGPLOT-Programm korrekt die Schriftendatei liest und Hoch-/Tiefstellung und spezielle Zeichen korrekt anzeigt (pgdemo2); ob das PGPLOT-Programm die Farbdatenbank korrekt lesen kann (pgdemo10); bei interaktiven Geräten, ob der Cursor korrekt arbeitet (pgdemo5, pgdemo6).
PROGRAM EX1
INTEGER PGOPEN, I
REAL XS(9), YS(9), XR(101), YR(101)
C Compute numbers to be plotted.
DO 10 I=1,101
XR(I) = 0.1*(I-1)
YR(I) = XR(I)**2*EXP(-XR(I))
10 CONTINUE
DO 20 I=1,9
XS(I) = I
YS(I) = XS(I)**2*EXP(-XS(I))
20 CONTINUE
C Open graphics device.
IF (PGOPEN('?') .LT. 1) STOP
C Define coordinate range of graph (0 < x < 10, 0 < y < 0.65),
C and draw axes.
CALL PGENV(0., 10., 0., 0.65, 0, 0)
C Label the axes (note use of \u and \d for raising exponent).
CALL PGLAB('x', 'y', 'PGPLOT Graph: y = x\u2\dexp(-x)')
C Plot the line graph.
CALL PGLINE(101, XR, YR)
C Plot symbols at selected points.
CALL PGPT(9, XS, YS, 18)
C Close the graphics device.
CALL PGCLOS
END
Dieser Code zeichnet den folgenden Graphen:
![[example]](../../common/images/article268/example.gif)
g77 your_code_name.f -L/X11directory/ -lX11 -L/PGPLOTdirectory/ -lpgplot
Sie müssen die folgenden Dateien in das Verzeichnis einschließen, wenn Sie Ihren Code ausführen:
grfont.dat rgb.txt pgwin serverKopieren Sie einfach diese Dateien aus dem pgplot-Verzeichnis in das Verzeichnis, aus dem Sie Ihren Code starten.
In dieser Anwendung war es unser Ziel, durch Klicken mit der Maus drei Punkte auf dem Bildschirm zu markieren und dann Fortran-Code den Kreis zeichnen zu lassen, der durch diese drei Punkte markiert ist. Dieses Problem war eine Aufgabe in unserer Klasse über "Computational Geometry", die von Dr.Serdar Celebi (mscelebi(at)itu.edu.tr) geleitet wurde.
Die folgenden Routinen definieren den Hintergrund und die Einstellung für den Bereich, in dem der Graph gezeichnet wird. Die Benutzung dieser Subroutinen ist ausführlich im PGPLOT-Handbuch erklärt (s. Link zur PGPLOT-Webseite am Ende).
..
...
call PGSCR(0,1.0,1.0,1.0) !set color representation
call PGENV(-50.0,50.0,-50.0,50.0,1,1) !set window and viewport
and draw labeled frame
call PGSCI(1) !set color index
call PGSFS(2) !set fill-area style
...
..
Wir benutzen die folgende Routine, PGPT1, um einen Zeiger an dem Punkt zu zeichnen, den wir mit der Maus markieren wollen.
..
...
WRITE (*,*) 'Cursor mode:', MODE
GOTO 10
END IF
CALL PGPT1(X, Y, 3) !draw one graph marker
ic=ic+1
xp(i)=x
yp(i)=y
Nachdem wir 3 verschiedene Punkte auf dem Bildschirm markiert haben, berechnet der Fortran-Code den Mittelpunkt und zeichnet dann den Kreis, der durch diese 3 Punkte verläuft.



..
...
c-----find the radius----------------
r=(xcenter-xp(1))**2+(ycenter-yp(1))**2
r=r**0.5
c-----draw the circle-------------------
call PGCIRC(xcenter,ycenter,r) !draws a circle
goto 1
...
..
Wir zeichnen den Kreis mit der oben gezeigten Routine "PGCIRC". Sie können den vorgezeichneten Kreis löschen und die Punkte erneut zuweisen, um einen anderen Kreis im gleichen Zeichenbereich zu zeichnen. Der vollständige Code ist in den Referenzen enthalten (siehe Ref. circle.f).
In dieser Anwendung war es unser Ziel, eine Näherungskurve durch die verschiedenen diskreten Punkte zu zeichnen, die mit der Maus auf dem Bildschirm markiert wurden, und dann die "porcupine"-Linien auf dieser Kurve zu zeichnen.
Porcupines sind die Linien, die benutzt werden, um unerwünschte Wendepunkte, flache Teile einer Kurve und Diskontinuitäten in Krümmungen zu entdecken. Deshalb ist dies ein wichtiges Konzept in der "Computational Geometry".
Wir entwickelten Code, der die kleinste quadratische Approximation benutzt, um eine Kurve der gewünschten Ordnung (1-4) durch eine Reihe von Punkten zu zeichnen, die vom Benutzer zufällig über eine grafische Schnittstelle mittels der Maus generiert werden können. Er hat die Fähigkeit, "porcupine"-Linien (deren Frequenz durch den Benutzer angepasst werden kann) entlang der Kurve zu zeichnen; dies ist ein Indikator für die Krümmung der Kurve.
Wir überspringen die Details des von uns geschriebenen Fortran-Codes und präsentieren hier die grafischen Ergebnisse (Sie finden den Code am Ende des Artikels).
Wir geben zuerst die diskreten Punkte auf dem Bildschirm mit der Maus ein und der Fortran-Code nimmt die Koordinaten dieser Punkte und speichert sie in einem Feld. Dann approximiert er die durch diese Punkte verlaufende Kurve in dem vom Benutzer angezeigten Bereich.(1-4)


Dann werden die "Porcupine"-Linien entlang der Kurve gezeichnet. Die Anzahl der "Porcupine"-Linien kann vom Benutzer verändert werden, und ohne den Hintergrund oder die Punkte zu verändern, kann die neue Menge an "Porcupine"-Linien entlang der gleichen Kurve gezeichnet werden.


Die Häufigkeit der "Porcupine"-Linien kann, wie unten zu sehen ist, ebenfalls erhöht werden. Außerdem kann das Programm eine neue Kurve mit der gleichen Datenmenge zeichnen.

