PyNGL und PyNIO FAQ

PyNGL und PyNIO FAQ
Copyright © 2012 UCAR
For original English text, go to: http://www.pyngl.ucar.edu
Translated by A.Romanova

Die häufig gestellten Fragen nachfolgend aufgelistet, nehmen an, dass Sie irgendwelche Grundkenntnisse über PyNIO und PyNGL haben

Allgemeine Fragen

  1. Unter welcher Version (En) von Python und NumPy werden PyNGL und PyNIO unterstützt?
  2. Wie ändere ich die Voreinstellung NCGM/PostScript/PDF Dateiname zu etwas anderem?
  3. Wie rüste ich meine PyNGL Script auf, so dass sie eine Quellendatei verwendet?
  4. Wie ändere ich alle meinen Fonts, um dieselbe Font zu sein?
  5. Wie bekomme ich Zugang zu speziellen Charakteren wie griechische Symbole?
  6. Kann ich auf PostScript Fonts in meiner PyNGL Script zugreifen?
  7. Wie kann ich eine Umgebungsvariable in PyNGL wieder auffinden?
  8. Wie kann ich den Textfunktionscode zu etwas anderem als die Voreinstellung ändern?
  9. Meine Textstrings in meinen Plots entweder haben Ausschussdaten in ihnen, oder sie werden völlig gezeigt nicht. Wo liegt das Problem?
  10. Wie nenne ich eine C oder Fortran Funktion oder Verfahren aus PyNGL?
  11. Wie kann ich das Seitenverhältnis oder die Größe meines Plots ändern?
  12. Wie kann ich vielfache Plots auf einer Seite bekommen?
  13. Ich habe vielfache Kontur-Plots auf einer Seite und will einen Label-Bar schaffen, der sie alle vertritt. Wie kann ich dies getan werden?
  14. Was für ist ein guter Weg, eine Farbenkarte aus PyNGL zu erzeugen?
  15. Kann ich Farbenmittel durch den Farbennamen setzen aber nicht Farbindex-Werte?
  16. Kann ich Farbenindex-Werte ändern oder Farbkarten in Mitte des Rahmens?
  17. Wie kann meine PostScript/PDF Output bekommen, um den größten Teil einer 8-1/2″ x 11″ Seite zu decken?
  18. Wenn ich versuche einen Plot zu schaffen, bekomme ich eine Fehlermeldung über die Arbeitsraum-Wiederzuteilung mehr als die maximale Größe. Wie kann ich das befestigen?
  19. Wenn ich versuche Ngl und/oder Nio zu importieren, bekomme ich einen Fehler über die libpng Bibliothek, das nicht aktuell ist.

    Lesen/Schreiben von Datendateien und zugreifen auf Variablen und Attribute

  20. Wie kann ich netCDF, HDF, GRIB oder CCM Verlauf Tape-Dateien lesen/schreiben?
  21. Wie kann ich ASCII Dateien lesen/schreiben?
  22. Wie befasse ich mich mit NaN (nicht eine Zahl) in meinen Daten?
  23. Ich versuche das _FillValue-Attribut für meine Daten zu setzen, aber bekomme eine Fehlermeldung.

    Datenverarbeitungsfragen

  24. Wie setze ich einen fehlenden Wert für meine Daten?
  25. Wie bestimme ich, ob meine Daten irgendwelche fehlenden Werte enthalten?
  26. Gibt es irgendwelche Interpolationsfunktionen im PyNGL Modul?

    Plotten-Fragen

  27. Wie kann ich PyNGL programmieren, um fehlende Werte in meiner Kontur, Vektoren, Stromlinie oder XY-Plot nicht zu planen?
  28. Wie kann ich Log-Skalierung in einem XY oder Kontur-Plot bekommen?
  29. Wie fülle ich meine Konturlevel mit verschiedenen allmählich übergehenden Mustern und/oder festen Farben?
  30. Wie ändere ich die Attribute einer Kurve oder Kurven in XyPlot?
  31. Wie überziehe ich einen Kontur-Plot (oder einen Vektor/Stromlinie Plot) auf einer Karte?
  32. Wie bezeichne ich die Linien der Breite/Länge auf meiner Karte?
  33. Kann ich die Bildauflösung meiner Map-Umrisse verbessern?
  34. Wenn ich eine Farbenkontur oder Vektor-Plot schaffen würde, wie wähle ich meine Farben aus, derart, dass sie über meine ganze Farbenmap ausgebreitet werden?
  35. Wie bekomme ich vielfache Skalen auf meinem XY oder Kontur-Plot?
  36. Wie kann ich eine doppelte Anführungszeichen Erscheinung haben, als ein Teil einer Textstring in PyNGL?
  37. Wie kann ich eine neue Linie Erscheinung haben, als ein Teil einer Textstring in PyNGL?
  38. Wie kann ich in einem X11 Fenster ziehen und verwenden Eingabetastatur, um Kontrolle zu planen, ohne einen Maus-Klick tun zu müssen?
  39. Wieso bekomme ich verschiedene Liniendicke auf verschiedenen Outputsgeräten mit demselben Dicke-Wert?

    Nachbearbeitung von Fragen

  40. Wie setze ich meine PyNGL Grafikdatei zu einem anderen Format um, wie GIF oder PNG, um das Web aufzusetzen?
  41. Wie setze ich meinen Mehrrahmen NCGM Datei zu individuellen PNG Dateien um?
  42. Wie setze ich meinen Mehrrahmen PostScript Datei zu individuellen PNG Dateien um?
  43. Wenn ich ein Fenster PyNGL X11 mit einer anderen Anwendung unverständlich mache, aktualisiert das Fenster sich nicht, wenn ich es zur Vorderseite zurückbringe.

    Dokumentationsfragen

  44. Wo kann ich eine Liste mit aller PyNGL Funktionen durchsuchen?
  45. Wo kann ich eine Liste mit aller PyNGL Ressourcen durchsuchen?
  46. Wo kann ich einige Beispiele durchsuchen, wie soll man PyNGL verwenden

Allgemeine Fragen

1. Unter welcher Version (en) von Python und NumPy werden PyNGL und PyNIO unterstützt?

Zurzeit wird Version Python 2.6 und 2.7 mit NumPy 1.4, 1.5, und 1.6 unterstützt. Wir planen Python 3 zu unterstützen, aber haben keinen vorgesehenen Termin.

2. Wie ändere ich den Vorgabe NCGM/PostScript/PDF Dateiname zu etwas anders?

Ändern Sie nur das zweite Argument rufen Ngl.open_wks herbei. Hier gibt es ein Beispiel, den NCGM Dateinamen zu “plot1.ncgm” zu ändern:

import Ngl

#
# Create an NCGM Workstation and change the name of the
# metafile to "plot1.ncgm".
#
wks = Ngl.open_wks("ncgm","plot1")

mapid = Ngl.map(wks)

Ngl.end()

3. Wie stelle ich meine PyNGL Script auf, so dass sie eine Quellendatei verwendet?

Siehe die Quellendateiseite für volle Details über Quellendateien.

Wenn Sie Ngl.open_wks herbeirufen, um eine Workstation zu öffnen, dann erlaubt Ihnen die String im zweiten Argument, eine Quellendatei zu nennen, um darin zu lesen. Zum Beispiel, wenn Sie die folgende PyNGL Script haben:

import Ngl

# Create an X Workstation object.
wks = Ngl.open_wks("x11","title_app")

# Draw a text string
Ngl.text_ndc(wks,"Hello, World",0.5,0.5)

Ngl.frame(wks)
Ngl.end()

dann wird es nach einer genannten Ressource-Datei “title_app.res” suchen. Wenn Sie dann die folgenden Linien in Ihrer “title_app.res” Datei haben: Wie ändere ich alle meine Fonts, um dieselbe Font zu sein?

*txFontColor   : Red
*txFont        : helvetica-bold
*txFontHeightF : 0.06

Sie sollten einen großen mit rot “Hello, World” String im Zentrum des Rahmens, verwenden helvetica-kühnen Font sehen.

4. Wie ändere ich alle meine Fonts, um dieselbe Font zu sein?

Stellen Sie zuerst Ihre PyNGL Script auf, um eine Ressource-Datei zu verwenden (siehe die Frage über Ressource-Dateien oben), und dann in der Ressource-Datei schließt die folgende Linie ein:

  *Font : helvetica

alle Fonts zu helvetica zu ändern (natürlich, verwenden jedwelche Font Sie wollen). Irgendwelche Font, die Sie in Ihrer PyNGL Script ausführlich setzen, werden diese Quellendateieinstellung überreiten.

Für ein Beispiel sieh PyNGL Script “ngl08p.py”, zusammen mit seiner Quellendatei “ngl08p.res” und seiner Ausgabe. Versuchen Sie, “Times-Roman” in der “ngl08p.res” Datei zu anderen Sript zu ändern, um die Ergebnisse zu sehen. Verwenden Sie entweder einen Font-Name oder einen Font-Index, wie in der Font-Tabelle verzeichnet wird.

Wenn Sie immer diese Font in allen Ihren PyNGL Fonts verwenden wollen, dann stellen die obengenannte Linie in einer Datei genannte “.hluresfile” in Ihrem Hausverzeichnis. Wenn PyNGL einen “.hluresfile” in Ihrem Hausverzeichnis sieht, wird es immer vor dem Laufen irgendwelche PyNGL Fonts überspielen.

5. Wie bekomme ich Zugang zu speziellen Charakteren, wie griechische Symbole?

Sie müssen zuerst die Font finden, dass Ihr Charakter da durch das Durchsuchen der Font-Tabelle besteht. Das Klicken auf irgendwelchen der Schriftart-Namen, wie “math_symbols”, wird Ihnen allen Charaktere für diese besondere Schriftart zeigen. Sobald Sie den Charakter finden, die Sie gewünscht haben, bemerken den Schriftart-Tabellenindex (“math_symbols” ist Index 18, zum Beispiel), und der entsprechende Charakter, und dann können Sie den Textfunktionscode “F” verwenden, um die Schriftart zu ändern. Zum Beispiel, um ein Glockensymbol zu bekommen, würden Sie diesen Charakter “n” in der “symbol_set1” Tabelle (Index 19) sehen, eine Glocke ist. Sie können dann die String “~F19~n~F ~” in jeder Textstring-Quelle verwenden, um damit anzuzeigen, dass Sie ein Glockensymbol wollen. “~F ~” bedeutet, gehen Sie zur ursprünglichen Schriftart zurück. Zum Beispiel es in einem Titel zu verwenden:

res.tiMainString = "Bell (~F19~n~F~)"

6. Kann ich auf PostScript Fonts in meiner PyNGL Script zugreifen?

Nein. Wenn Sie PyNGL Schriftart Nummer 4 verwenden, werden Sie die gestrichene simplex_roman Schriftart bekommen, egal was für eine Workstation Sie laufen, sogar eine PostScript-Workstation. Wenn Sie “4” zu “Helvetica” ändern, dann werden Sie PyNGL Schriftart 21 bekommen, d. h. eine Helvetica Schriftart, die Vielecke verwendet, um die Charaktere und nicht den direkten Zugang zu einer PostScript-Schriftart zu erzeugen.

Es gibt etwas Verwirrung über die Verfügbarkeit von PostScript-Schriftarten, weil sie aus niedriger Stufe NCAR Grafik zugänglich sind, laut der Diskussion über PS gegen GKS Fonts. Für NCAR GKS Schriftarten numerierten 1 und-2 bis-34, der PostScript-Treiber greifen auf die Standard 13 PostScript Fonts zu (schief und kühn-schief werden unterstützt, d. h. die Schriftart Nummern-23,-24,-27,-28,-31,-32). Für Schriftarten-2 bis-20 (die Hershey Schriftarten) eine Mapping wird zu gleichwertigen PostScript –Schriftarten getan, wenn möglich ist. Wenn ein Charakter nicht verfügbar ist (wie die Script-Schriftarten oder Road Map-Zeichen), dann würde man Plotchar verwenden müssen. Wir hoffen, die Fähigkeit hinzuzufügen, auf PostScript Schriftarten aus PyNGL in der Zukunft zuzugreifen.

7. Wie bekomme ich eine Umgebungsvariable in PyNGL wieder?

Verwenden Sie die abgrenzen Funktion der Python os Modul:

    path = os.environ["PATH"]

8. Wie kann ich den Textfunktionscode zu etwas anders ändern als die Voreinstellung?

Wenn Sie eine Standarddurchführung von PyNGL verwenden, ist der Default-Funktionscode eine Tilde: “~”. Um den Funktionscode zu einem anderen Charakter zu ändern, wenn sie den Ngl.text, Ngl.text_ndc oder  Ngl.add_text Verfahren verwenden, setzen die txFuncCode Quelle:

txresources.txFuncCode = "^"

Wenn Sie Ihren Textfunktionscode für jede einzelne Textquelle ständig geänderten werden wollen, verwenden Sie jemals in allen Ihren PyNGL Schriften, dann setzten die globale Quelle “TextFuncCode”, die nur in einer Quellendatei gesetzt werden kann. Diese Quelle wird am besten in der Datei “~/.hluresfile” folgendermaßen gesetzt:

    *TextFuncCode : ^

Die “.hluresfile” Datei muss in Ihrem Hausverzeichnis sein, um PyNGL zu sehen und es zu laden.

9. Meine Textstrings in meinen Plots entweder haben Müll in ihnen, oder sie werden völlig gezeigt nicht. Wo liegt das Problem dann?

Wenn Sie auch Fehlermeldungen bekommen, die folgendermaßen aussehen:

    PLCHHQ - CHARACTER NUMBER 10 (w) IS NOT A LEGAL FUNCTION CODE

dann höchstwahrscheinlich besteht das Problem darin, dass Sie einen Tilde-Charakter (” ~ “) in Ihrer String haben. Standardmäßig, wenn PyNGL eine Tilde in Ihrer Schnur sieht, nimmt er an, dass der folgende Charakter ein spezieller “Funktionscode” ist.

Um darum herumzukommen, müssen Sie PyNGL sagen, dass Sie nicht wollen, der Tilde-Charakter den Anfang eines Funktionscodes zu vertretten. Sieh die vorherige Frage darauf, wie man Ihren Textfunktionscode ändert.

10. Wie nenne ich eine C oder Fortran Funktion oder Verfahren aus PyNGL?

Zum Vergrößern mit C oder C ++, sieh Extending and Embedding the Python Interpreter. Diese Seite beschreibt, wie man Module in C oder C ++ schreibt, um den Python-Interpreter mit neuen Modulen zu erweitern. Jene Module können neue Funktionen sondern auch neue Objektarten und ihre Methoden definieren. Es beschreibt auch, wie man Python-Interpreter in einer anderen Anwendung für den Gebrauch als eine Erweiterungssprache einbettet. Siehe auch SWIG. Zum Vergrößern mit Fortran, siehe f2py.

11. Wie kann ich das Seitenverhältnis oder die Größe meines Plots ändern?

Sie können die viewport-Ressource vpWidthF und vpHeightF verwenden. Die Ansichtsfenster-Koordinaten werden normalisiert; d. h. sie nehmen Werte aus 0.0 bis 1.0 (einschließlich). Zum Beispiel, wenn Sie Ihren Plot wollen, zweimal so lang wie seinen Höchststand zu sein, dann könnten Sie vpWidthF auf 0.4 und vpHeightF zu 0.8 setzen.

Bemerken Sie bitte, um das Seitenverhältnis eines Kartenprojektions zu ändern, Sie müssen auch die Quelle mpShapeMode auf “FreeAspect” setzen.

Für ein Beispiel, das Seitenverhältnis einer zylindrischen gleich weit entfernten Karte zu ändern, sieh die PyNGL Script “map1.py”, und seine Ausgabe (1. Frame und 2. Frame).

12. Wie bekomme ich vielfache Plots auf einer Seite?

Wenn Ihre Plots die gleiche Größe haben, dann können Sie das PyNGL Ngl.panel Verfahren verwenden, der als Eingang die Workstation nimmt, darauf Sie die Plots zeichnen wollen, die Plots-Liste, die Sie auf einer Seite stellen wollen, einen Datenfeld, das Layout-Plots beschreibt, und eine optionale Ressource-Liste. Für ein Beispiel Ngl.panel zu verwenden, sieh die Script “panel1.py”, und seine Ausgabe (1. Frame und 2. Frame).

13. Ich habe vielfache Kontur-Plots auf einer Seite und will einen Label-Bar schaffen, der sie alle vertritt. Wie kann ich dies getan werden?

Sieh die Antwort oben auf die Frage “Wie bekomme ich vielfache Plots auf einer Seite?” Das Beispiel zeigt wie man die gewünschte Label-Bar bekommt.

14. Was für ist eine gute Weise eine Farbenkarte aus PyNGL zu erzeugen?

Sieh zuerst die Abteilung “Creating your own color map using HSV values” für eine Einführung ins HSV- Farbkreis schaffen, und wie es Ihnen hilft, damit eine Farbenkarte zu schaffen. Dann werfen Sie einen Blick auf das color3 Beispiel und seine Ausgabe (1. Frame, 2.Frame, 3.Frame). Die Funktion Ngl.hsvrgb befindet sich im Ngl Modul.

Sie können die PyNGL Funktion Ngl.draw_colormap verwenden, um die aktuelle Farbe-Map verbunden mit der Workstation zu ziehen. Für ein Beispiel, siehe PyNGL “color1.py” Schrift und 1. Frame und 2. Frame seiner Ausgabe.

15. Kann ich Farbenmittel durch den Farbennamen setzen statt Index-Werte färben?

Siehe der Paragraph “Creating your own color map using named colors and RGB values“.

16. Kann ich Farbenindex-Werte oder Farbe-Maps  in Mittel-Frame ändern?

Die Hauptrücksicht im davon zu tun, ist die Hintergrundfarbe ändern. Wenn die Hintergrundfarbe Mitte Bild geändert wird (Farbenindex 0), dann in den meisten Fällen zurzeit ändern Sie sich der Hintergrund-Farben,  Ihr kompletter Frame wird mit dieser Farbe überschrieben. So lange Sie die Hintergrundfarbe in Mitte-Bild nicht ändern, sollten Ihre Ergebnisse als gewünscht werden. Sieh das einfache Beispiel unten.

Das Versuchen in einer kompletten neuen Farbenkarte zu tauschen, ist wieder in erster Linie wegen Rücksichten mit dem Rücksetzen der Hintergrundfarbe problematisch. Wenn Sie PS oder PDF Ausgabe erzeugen, und wenn Ihre Hintergrundfarbe die Vorgabe darstellt, dann sollten diese Dinge funktionieren. Dinge sollten in allen Fällen im Gehen zu NCGM und Übersetzen mit ctrans funktionieren. X11 Ausgabe zu erzeugen, funktioniert außer wenn Sie speziell die Hintergrundfarbe rücksetzen.

Aber auf der sicheren Seite zu sein, was in allen Fällen funktioniert wird, fängt mit jeder Farbenkarte an und definiert dann irgendwelche Farbenindizes außer dem Hintergrund wieder. Zum Beispiel, wenn Sie eine Farbentabelle mit 256 definierten Farben haben und wollen das Mitte-Bild mit einer verschiedenen Farbentabelle ersetzen, verwenden Sie die Funktion Ngl.set_color, um alle Farbenindex-Werte abgesehen vom Index 0 wiederzudefinieren. Die Logik im folgenden Beispiel illustriert das:

import numpy,Ngl

res = Ngl.Resources()

#
#  Draws cells, fitting them into a box with lower left corner (xll,yll)
#  and upper right corner (xur,yur) with nx cells in x and ny cells in y.
#  For each call each cell is colored using increasing indices in the
#  current color map *starting with color index 2*.
#
def draw_cells(wks,xll,yll,xur,yur,nx,ny):
  xinc = (xur-xll)/nx
  yinc = (yur-yll)/ny
  for j in xrange(ny):
    plly = yll + j*yinc
    pury = plly + yinc
    for i in xrange(nx):
      pllx = xll + i*xinc
      purx = pllx + xinc
      x = numpy.array([pllx,purx,purx,pllx,pllx])
      y = numpy.array([plly,plly,pury,pury,plly])
      res.gsFillColor = i+j*nx+2
      Ngl.polygon_ndc(wks,x,y,res)

#
#  Define colors "black", "red", "green", "blue" in order
#  starting with color index 2.
#
cmap = numpy.array([[0.,0.,0.],[1.,1.,1.],[0.,0.,0.], \
                    [1.,0.,0.],[0.,1.,0.],[0.,0.,1.]])
rlist = Ngl.Resources()
rlist.wkColorMap = cmap
wks_type = "ps"
wks = Ngl.open_wks(wks_type,"cell",rlist) # Open a PostScript workstation.

#
#  Draw four color boxes in the lower half of the plot
#  using the cmap.
#
draw_cells(wks, 0., 0., 1.0, 0.5, 2, 2)

#
#  Redefine color for indices 3-5.
#
Ngl.set_color(wks, 3, 0., 1., 1.)  # cyan
Ngl.set_color(wks, 4, 1., 0., 1.)  # magenta
Ngl.set_color(wks, 5, 1., 1., 0.)  # yellow

#
#  Draw color boxes using the redefined color map.
#
draw_cells(wks, 0., 0.5, 1.0, 1.0, 2, 2)

Ngl.frame(wks)
Ngl.end()

17. Wie kann meine PostScript/PDF Output bekommen,  um den größten Teil einer 8-1/2″ x 11″ Seite zu decken?

PyNGL tut das für Sie automatisch, da der spezielle Ressource nglMaximize auf Richtig standardmäßig gesetzt wird.

Wenn Sie die Positionierung eines Plots in der PS/PDF Ausgabe kontrollieren wollen, wenn Sie Ihren PostScript oder PDF Workstation bilden, verwenden Sie die Ressourcen wkDeviceLowerX, wkDeviceLowerY, wkDeviceUpperX, und wkDeviceUpperY. Bemerkung: Für die obengenannten Ressourcen damit Effekt zu haben, müssen Sie nglMaximize auf den Falschen setzen, sonst wird Ihr Plot die Seite füllen. Bemerken Sie, dass es möglich ist, negative Werte für diese Ressourcen zu haben.

18. Wenn ich versuche einen Plot zu schaffen, bekomme ich eine Fehlermeldung über die Workstation-Wiederzuteilung übersteigend die maximale Größe. Wie kann ich das befestigen?

Wenn die Fehlermeldung etwa so aussieht:

    fatal:ContourPlotDraw: Workspace reallocation would exceed maximum size
    16777216
    fatal:ContourPlotDraw: draw error
    fatal:ContourPlotDraw: draw error
    fatal:PlotManagerDraw: error in plot draw
    fatal:_NhlPlotManagerDraw: Draw error

dann müssen Sie Ihre Arbeitsraum-Größe erhöhen. Erstens müssen Sie den Vorgabe-Arbeitsraum wiederbekommen, und dann können Sie die “wsMaximumSize” Quelle setzen. Um das zu tun, fügen Sie den folgenden Code direkt hinzu, nachdem Sie einen Workstation:

ws_id = Ngl.get_workspace_id()
rlist = Ngl.Resources()
rlist.wsMaximumSize = 33554432
Ngl.set_values(ws_id,rlist)

Sie können ständig die Arbeitsraum-Größe durch das Setzen wsMaximumSize ~/.hluresfile erhöhen.

*wsMaximumSize : 33554432

Wenn Sie einen Kontur-Plot ziehen, könnten Sie stattdessen versuchen, auf das Rasterumreißen umzuschalten, indem Sie die Quelle cnFillMode zu “RasterFill” gesetzt haben.

19. Wenn ich versuche Ngl und/oder Nio zu importieren, bekomme ich einen Fehler über die libpng Bibliothek, die nicht aktuell ist.

Die Module von PyNGL und PyNIO können mehrere Abhängigkeiten von der PNG Bibliothek (libpng) haben, und folglich kann es eine Abhängigkeit von einer geteilten Version dieser Bibliothek geben. Die meisten Systeme von Linux und MacOS kommen mit dieser bereits installierten Bibliothek.

In einigen Fällen, jedoch, können Sie eine ältere Version dieser Bibliothek auf Ihrem System haben, und Sie werden eine Beschwerde bekommen, dass es nicht aktuell genug ist.

Wir sind in einen Fall geraten, wo die Aufrüstung eines Apple Systems aus MacOS 10.5.2 zu MacOS 10.5.8 das Problem behoben hat, weil um die PNG Bibliothek veranlasst hat, befördert zu werden.

Linux Benutzer können im Stande sein, “yum” oder “Begabung” zu verwenden, um ihre PNG Bibliothek zu befördern.

Sie können auch selbst die Bibliothek installieren, entweder aus einer vorkompilierten Dualzahl oder Quellcode. Gehen Sie zu http://www.libpng.org/pub/png/libpng.html und entweder laden Sie eine vorkompilierte Dualzahl, oder den Quellcode (die “.tar.gz” Datei unter “mit der config Schrift”) herunter.

Lesen/Schreiben von Datendateien und zugreifen auf Variablen und Attribute

20. Wie kann ich netCDF, HDF, GRIB oder CCM Verlauf Tape-Dateien lesen/schreiben?

Sie können das Nio Modul verwenden, das mit PyNGL gestopft wird. Nio ist ein Python-Modul, das Ihnen Zugang lesen und/oder schreiben erlaubt, zu einer Vielfalt von Datenformaten mit einer Schnittstelle, die netCDF verwenden. netCDF ist ein selbstdokumentierendes und Network- codeunabhängiges Datenformat – damit sieh netCDF User Guide für Details.

21. Wie kann ASCII Dateien lesen/schreiben?

Ausschließlich, um die Beispiele zu unterstützen, eine genau grundlegende ASCII gelesene Funktion, Ngl.asciiread wurde als ein Teil des PyNGL Moduls geschrieben. Natürlich sind alle gelesenen Funktionen von Python auch verfügbar.

22. Wie befasse ich mich mit NaN (nicht eine Zahl) in meinen Daten?

Sie können numpy verwenden, um die NaN Werte zu vermissten Werten zu ändern:

importieren Sie numpy als N
var1 = N.where(N.isnan(var[:]),var._FillValue[0],var[:])

importieren Sie numpy als N

23. Ich versuche _FillValue-Attribut für meine Daten zu setzen, aber bekomme eine Fehlermeldung.

Wenn Sie versuchen ein _FillValue-Attribut für Ihre Daten zu setzen, und die Fehlermeldung bekommen:

ncendef: ncid 65536: NetCDF: Not a valid data type or _FillValue type mismatch

dann das bedeutet, dass Sie einen Wert verwenden, das vom falschen Typ für Ihre Datenvariable ist. NetCDF verlangt _FillValue Typ, um derselbe Typ wie die Variable zu sein, es wird (aus dem guten Grund) beigefügt. Außerdem behandelt PyNIO eine Anweisung zu einem _FillValue gerade wie jede andere Attribut-Anweisung, meinend, dass es nicht versucht, den Typ umzuwandeln, der ihm gereicht wird.

Wenn Ihre Datenvariable eine “Gleitkommazahl” in NetCDF ist, müssen Sie den _FillValue als ein “numpy.float32″ zuteilen. Wenn Sie es mit dem wörtlichen Wert “-999″ zuteilen, wird es eine Ganzzahl geworden, die nicht funktionieren wird. Leider, selbst wenn Sie den Wert “-999.0″ verwenden, funktioniert das auch nicht, weil der Default Ganzzahl-Typ in der Python (und NumPy) “float64″ ist, bekannt als “doppelt” in NetCDF. So müssen Sie einen numpy “float32″ Wert ausführlich schaffen.

Sie können das mit folgendes tun:

import numpy
...
data._FillValue = numpy.array(-999.0,dtype=numpy.float32)

oder

data._FillValue = numpy.array(-999.0,dtype='f')

Wir können das versuchen in der Zukunft zu verbessern, indem PyNIO soll eine angemessene Typumwandlung für das _FillValue-Attribut auf der Anweisung leisten.

Datenverarbeitungsfragen

24. Wie setze ich einen fehlenden Wert für meine Daten?

PyNGL wird als eine Grafikbibliothek entworfen und, als solcher, er hat minimale Datenverarbeitungsfunktionalität. Solche Funktionalität wird ein Teil des zukünftigen PyNGL Moduls sein.

Beginnend mit der Version 1.3.0b1, die meisten Funktionen in PyNGL automatisch die fehlende Werte bearbeiten, wenn Ihren Datenfeld ein numpy maskiertes Datenfeld ist. Wenn Sie maskiertes Datenfeld nicht haben und Ihre Daten fehlende Werte enthalten, dann werden Sie die passenden Mittel zu speziellen setzen müssen. Beispiele über wie man kann Vektorfeld und Skalarfeld fehlende Werte installieren sehen Tutorium-Beispiel 6; für ein Beispiel Koordinaten-Array fehlende Werte, sieh Tutorium-Beispiel 10.

25. Wie bestimme ich, ob meine Daten irgendwelche fehlenden Werte enthalten?

Sie werden die Quelldaten überprüfen müssen. Zum Beispiel, wenn Sie Daten aus einer netCDF Datei verwenden, die in mit dem Nio Modul gelesen ist, dann können Sie überprüfen, ob eine gegebene Variable einen _FillValue oder ein Missing_value-Attribut hat. Sieh Tutorium-Beispiel 6.

26. Gibt es irgendwelche Interpolationsfunktionen im PyNGL Modul?

Einige Interpolationsfunktionen sind ins PyNGL Modul  in erster Linie zur Unterstützung der Beispiele eingeschlossen worden. Die 1-Dimension Spline-Interpolator Ngl.ftcurv wird im Tutorium-Beispiel 11 verwendet. Die 1-dimensionale Spannung Spline-Interpolator für periodische Daten Ngl.ftcurvp wird im Tutorium-Beispiel 7 verwendet. Die 1-dimensionale integrierte Rechenmaschine für periodische Daten Ngl.ftcurvpi wird im Tutorium-Beispiel 7 verwendet. Die 2-dimensionale Interpolator für zufällige Daten Ngl.natgrid wird im Tutorium-Beispiel 8 verwendet.

Plotten von Fragen

27. Wie kann man zu PyNGL sagen, um nicht die fehlende Werte in meiner Kontur oder XY-Plot nicht zu planen?

Wenn Sie Version 1.3.0b1 oder neuere von PyNGL haben, dann werden die fehlende Werten automatisch ignoriert, wenn Sie einen numpy verborgen Array zu einer Plotten-Funktion übergehen.

Jedoch, wenn Sie keine verborgen Array haben, dann verwenden Sie für Kontur-Daten ScalarField Ressource sfMissingValueV (für ein Beispiel, sieh Tutorium-Beispiel 9). Für den Vektoren oder die stromlinienförmigen Daten, verwenden Sie die Ressource  vfMissingUValueV und vfMissingVValueV, verwenden Sie die Ressource caXMissingV oder caYMissingV (für ein Beispiel daübe, sieh Tutorium-Beispiel 10).

28. Wie kann ich Log-Skalierung in einem XY oder Kontur-Plot?

Für einen XyPlot, installieren xyXStyle Ressourcen und/oder xyYStyle zu “Log”, abhängig davon an welchen Äxten Sie in der Log-Skalierung sein wollen. Für ein Beispiel sehen die Script “xy1.py” und die Ausgabe (1. Frame).

Für einen Kontur-Plot die Methode für Wechsel zu Log- Skalierung hängt davon ab, ob die Koordinaten für die Achse, die Sie loggen wollen, sind regelmäßig oder unregelmäßig verteilt. Wenn sie regelmäßig verteilt sind, dann verwenden Sie trXLog, oder trYLog genauso wie es wurde für den XY-Plot oben getan. Für ein Beispiel, sieh das Beispiel “contour1.py”, und seine Ausgabe (1.Frame mit dem Vorgabe linear/ linear Skalierung und 2.Frame mit der linear/ Log-Skalierung). Log-Skalierung für unregelmäßig-verteilten Daten wird zurzeit nicht durchgeführt.

29. Wie fülle ich meine Konturlevel mit verschiedenen allmählich übergehenden Mustern und/oder festen Farben?

Wenn Sie nur Ihren Konturlevel mit verschiedenen festen Farben füllen, installieren cnFillOn zu Richtig. Um die Default-Farben zu ändern, die für Konturlevel verwendet sind, installieren Sie cnFillColors auf eine Array von gewünschten Farbenindizes (sicher Sie sich, um genügenden Farben für die Zahl von Konturlevel plus ein einzuschließen).

Wenn Sie Konturlevel mit verschiedenen allmählich übergehenden Mustern füllen wollen, müssen Sie cnMonoFillPattern auf den Falschen setzen. Um den Default gefüllten Mustern zu ändern, verwendet für Konturlevel, installieren cnFillPatterns zu einer Array von gewünschten gefülltes Musterindizes (wieder, sicher Sie sich, um genügenden gefülltes Musterindizes für die Zahl von Konturlevel plus ein einzuschließen). Es gibt 18 verschiedene gefüllten Muster: Muster 0 ist fest gefüllt, Muster 1-16 sind verschieden gefüllten Muster, und Muster 17 ist ein spezielles punktiert-gefülltes Muster. Wenn Sie “-1″ für ein gefülltes Muster verwenden, bedeutet das es durchsichtig abzureisen (nicht gefüllt).

Für ein Beispiel, zeigt man wie einen Kontur-Plot bilden sollen, verwenden verschiedene  gefüllten Muster und Farben, sehen Sie die Script “contour2.py” und die Ausgabe.

30. Wie ändere ich die Attribute einer Kurve oder Kurven in einen XyPlot?

Sie sollten im Stande sein, Ressourcen für XyPlot zu installieren, genauso wie Sie sich für andere Plot-Gegenstände wollen. Für ein Beispiel, siehe die Script “multi_y.py” und seiner ersten Frame. XyPlot kann vielfache Kurven enthalten. Für ein Beispiel von Attributwechsel für vielfache, sieh die Script “color2.py” und die Ausgabe.

31. Wie überziehe ich einen Kontur-Plot (oder einen Vektor/Stromlinie Plot) auf einer Map?

Für Konturen über eine Map, sieh Tutorium-Beispiel 5 und 9. Für Vektoren, sieh Tutorium-Beispiel 6. Stromlinien über Darstellungen können in einer ähnlichen Weise behandelt werden, Ngl.streamline_map zu verwenden.

32. Wie bekomme ich die Linien der Breite/Länge auf meiner Karte?

Wenn Ihr Vorsprung rechteckig ist, dann sollten Sie lat/lon tickmarks standardmäßig bekommen. Wenn Sie diese abschalten wollen, dann können Sie die Quelle pmTickMarkDisplayMode auf “Never” installieren. Für ein Beispiel, das lat/lon tickmarks enthält, siehe darauf überzogenen Kontur-Plot, sieh “chkbay.py” und seine Ausgabe. Für ein Beispiel, das diese tickmarks abschaltet, sieh “ctnccl.py” und seine Ausgabe.

33. Kann ich die Entschlossenheit meiner Map-Kontur verbessern?

Ja, durch Verwenden von mpDataBaseVersion Ressource. Der Default ist “LowRes”. Wenn Sie das zu “MediumRes” oder “HighRes” ändern, werden Sie die Entschlossenheit Ihrer Map-Kontur verbessern. Für ein Beispiel, um die drei Niveaus von Resolution zu vergleichen, siehe die Script coast1.py und

Frame 1 (niedrige Resolution)

Frame 2 (mittlere Resolution)

Frame 3 (hohe Resolution)

Hinweis: Der “HighRes” Quellenwert ist nur für Küstenkontur, und Sie müssen RANGS (Regionally Accessible Nested Global Shorelines) Datenbank herunterladen, die von Rainer Feistel aus Wessel und Smith’s GSHHS (Global Self-consistent Hierarchical High-resolution Shoreline) Datenbank entwickelt ist. Für weitere Informationen über wie man und wo die Datenbank installieren soll, lesen Sie die kurze Abteilung auf hochauflösenden Küstenlinien.

34. Wenn ich eine Farbenkontur oder Vektor-Plot schaffe, wie wähle ich meine solche Farben aus, dass sie über meine ganze Farbenkarte ausgebreitet werden?

Das ist Default, wenn es PyNGL verwendet (NCL Benutzer bemerken, das ist verschieden von der Standardeinstellung in diesem Paket). Die Farben in der aktuellen Farbentabelle werden gleichmäßig über die Konturlevel ausgebreitet. Wenn Sie diese Eigenschaft abdrehen wollen, setzen die Quelle nglSpreadColors zum Falschen. In diesem Fall werden die Farben in der Farbentabelle den Konturlevel durch das Zusammenbringen von Farbenindizes mit Kontur-Zwischenräumen zugeteilt.

Für ein Beispiel über wo der Default-Wert von (Richtig) nglSpreadColors in Kraft tritt, siehe den vierten Frame von ngl02p.py. Für ein Beispiel, diese Quelle auf den Falschen zu setzen, sieh den ersten Frame von ngl08p.py.

Wenn Sie die Farben umkehren wollen, dann können Sie nglSpreadColorStart auf einen Farbenindex zum Ende der Farbentabelle und nglSpreadColorEnd zu einem Farbenindex in der Nähe vom Anfang der Farbentabelle setzen. Für ein Beispiel, sieh seam.py und seinen ersten Frame.

35. Wie bekomme ich vielfache Skalen auf meinem XY oder Kontur-Plot?

Setzen Sie einen tm*Mode Mittel zum Ausführlichen (abhängig von welcher Achse Sie wollen getrennt zu etikettieren) und dann verwenden Sie tm*Values und tm*Labels Mittel, um die gewünschte Etiketten zu bekommen, die Sie an beliebigen Hochkomma-Werten wollen. Für ein Beispiel, sieh “multi_y.py” und seinen dritten Frame.

Für ein Beispiel von verschiedenen Skalen auf einem Kontur-Plot, siehe die Schrift “ngl11p.py” und seinen ersten Frame.

36. Wie kann ich doppeltes Anführungszeichen haben (“), erscheinen als ein Teil einer Textstring in PyNGL?

Schließen Sie die String in einzelnen Anführungszeichen ein. Zum Beispiel:

import Ngl

wks = Ngl.open_wks("x11","test")

txres = Ngl.Resources()
txres.txFontHeightF = 0.03
Ngl.text_ndc(wks,'"title"',0.5,0.5,txres)
Ngl.frame(wks)

Ngl.end()

37. Wie kann ich eine neue Linie als ein Teil einer Textstring in PyNGL haben?

Sie können den Textfunktionscode verwenden, der eine Wagenrücklauf (“C”) vertritt:

import Ngl

wks = Ngl.open_wks("x11","test")

txres = Ngl.Resources()
txres.txFontHeightF = 0.03
Ngl.text_ndc(wks,"title1~C~title2~C~title3~C~title4",0.5,0.5,txres)
Ngl.frame(wks)

Ngl.end()

Hinweis: Das obengenannte Beispiel verwendet die Tilde (” ~ “) für den Textfunktionscode. Das ist der Default, wenn Sie eine PyNGL Standarddurchführung verwenden. Sieh die Frage beim Ändern des Textfunktionscodes für mehr Information.

38. Wie kann ich zu einem Fenster X11 ziehen und manuelle Programmeingabe verwenden, um Kontrolle zu planen, ohne einen Maus-Klick tun zu müssen?

Sieh das Beispiel in der Dokumentation für Ngl.clear_workstation.

39. Wieso bekomme ich verschiedene Liniendicke auf verschiedenen Outputsgeräten mit demselben Dicke-Wert?

Liniendicke, die auf verschiedenen Ausgabegeräten (X11, PostScript, PDF, usw.) gezeigt ist, kann für denselben Liniendicke-Wert bedeutsam verschieden sein. Das ist wegen mehrerer Faktoren.

Jedes Gerät hat einen Default, oder nominelle Liniendicke (nennen auch manchmal Linienbreite). Diese nominelle Linienbreite ist die Linienbreite mit dem Default -Dicke-Wert von 1.0 gezogen ist. Im Allgemeinen ist diese nominelle Linienbreite für verschiedene Geräte verschieden. Was für ein bestimmtes Gerät hält seine Default-Linienbreite, dass sie sich vom kaum sichtbaren bis Fett ändern kann. Zum Beispiel kann die nominelle Linienbreite für die PostScript Produktion dünner aussehen als eine Linie, die mit derselben Breite-Spezifizierung auf einem Fenster X11 gezogen ist. Außerdem können sich die Ergebnisse für die X11 Ausgabe abhängig von der Resolution des Ausgabegeräts ändern.

Der Linienbreite- Skalenfaktor wird auf die nominelle Linienbreite auf einem gegebenen Gerät angewandt. Jedoch wird das Linien nicht notwendigerweise erzeugen, die genau diesen Faktor darstellt, der größer als die Default-Breite ist. Tatsächlich kann der Skalenfaktor keine Wirkung oder unerwartete Effekten haben. Im Allgemeinen wird der Skalenfaktor auf die Default-Linienbreite des Geräts und der Karten auf die nächste verfügbare Hardware-Linienbreite angewandt, die ein Gerät unterstützt. Für die gedruckte PostScript Produktion werden die Ergebnisse, die Sie bekommen, wahrscheinlich so genau sein, wie Sie wollen würden, aber für die X11 Ausgabe oder an einen PostScript auf dem Computermonitor angezeigt werden, werden Sie unterschiedliche Ergebnisse bekommen.

Verschiedene Geräte interpretieren verschieden auch fraktionelle oder Null Linienbreiten. Zum Beispiel PostScript und PDF werden immer eine Linie erzeugen, egal wie klein der Linienbreite-Wert ist – eine Null Linienbreite-Wert wird ein Pixel breite Linie erzeugen. Jedoch für die X11 Ausgabe jeder Linienbreite-Wert werden weniger als 0.5 gewöhnlich zu einer Nullbreite-Linie einzeichnen, darstellend  die nächste verfügbare Hardware-Linienbreite. Im Gegensatz zu PS oder PDF wird eine Nullbreite-Linie in der X11 Ausgabe nicht gezogen.

Wenn Sie zur “Null” eine Linie versuchen, empfiehlt man ein anderer Weg das zu tun, als die Liniendicke zu 0 zu setzen. Zum Beispiel können Sie das in der Vordergrundfarbe ziehen. Dadurch werden Sie dieselben Ergebnisse für X11 und PostScript bekommen.

Das Endergebnis ist, dass Sie dadurch nicht überrascht sein sollten, was Sie bekommen, wenn das die Linienbreiten betrifft – es hängt bestimmt vom Ausgabegerät ab.

Das Beispiel thickness.py kann geführt werden, um eine Idee zu bekommen, was für verschiedene Linien gezogen mit verschiedenen Dicke-Spezifizierungen, werden auf verschiedenen Geräten ähnlich aussehen. In diesem Beispiel müssen Sie das Ausgabegerät ändern, wenn Sie sich für Ergebnisse außer für PostScript interessieren.

Nachbearbeitung von Fragen

40. Wie setze ich meine PyNGL Grafikdatei zu einem anderen Format um, wie GIF oder PNG, um das Web aufzusetzen?

Früher pflegten wir zu empfehlen, eine Script zu verwenden, genannt “ncgm2gif”, um NCGMs zu GIF Dateien umzuwandeln. Jedoch ist “ncgm2gif” ein bisschen überholt geworden, und es gibt bessere Methoden, um sich zu anderen Rasterformaten umzuwandeln.

Unsere Empfehlung ist, mit PostScript (PS) oder Encapsulated PostScript (EPS) Datei anzufangen, und dann verwenden “Bekehrten” aus ImageMagick Folge von Werkzeugen, um sich PS Datei zu einem anderen Format wie GIF, PNG oder sogar MPEG umzuwandeln.

Sie können die ImageMagick Folge bekommen aus:

http://www.imagemagick.org/

Klicken Sie auf “Download” Link auf der linken Seite, und Ihnen wird viele Optionen für Download-Positionen geboten.

Mac Benutzer können das mit “Streikbrecher installiert imagemagick” herunterladen. Sie müssen zuerst Streikbrecher installiert haben – http://fink.sourceforge.net/.

Sobald Sie die Werkzeuge gebildet und installiert haben, können Sie Ihre PS oder PDF Dateien zum anderen Format- umwandeln, verwendend:

    convert -trim file.ps file.png
    convert -trim file.pdf file.png

Wir benutzen gern “-trim” Auswahl, unerwünschten Leerraum herum das Image zu entfernen. Das schneidet es ziemlich nah so, wenn Sie es in einer Präsentation von PowerPoint stellen, ist es besser, einen reinen weißen Hintergrund zu verwenden, so sieht das abgeschnittene Image komisch nicht aus.

Die Dokumentation über ” Bekehrten” kann gefunden werden an:

http://www.imagemagick.org/script/convert.php

Es gibt viele verfügbare Optionen mit dem Bekehrten, das, gemäß ihrer Webseite erlauben Ihnen ein Image die Größe zu ändern, weichzeichnen, schneiden, Flecken entfernen, bearbeiten, aufzeichnen, kippen, verbinden, überbearbeiten, und vieles mehr”.

41. Wie wandle ich meinen Mehrfachbilddarstellung NCGM Datei zu individuellen PNG Dateien um?

Laden Sie die Python-Script ncgm2png herunter. Die Durchführung dieser Schrift ohne irgendwelche Argumente wird die Nutzungsinformation erzeugen. Damit zu funktionieren, verlangt diese Script, Sie haben aus dem ImageMagick Paket umgewandelt, installiert sowie als ctrans und med aus PyNGL Distribution.

42. Wie wandle ich meinen Mehrfachbilddarstellung PostScript Datei zu individuellen PNG Dateien um?

Laden Sie die Python-Script ps2png herunter. Die Durchführung dieser Schrift ohne irgendwelche Argumente wird die Nutzungsinformation erzeugen. Damit zu funktionieren, verlangt diese Script, Sie haben aus dem  ImageMagick Paket umgewandelt, installiert sowie als psplit aus PyNGL Distribution.

43. Wenn ich ein PyNGL X11Fenster mit einer anderen Anwendung verdunkle, aktualisiert sich das Fenster nicht.

Das ist möglich aufgrund eines X11 Ergänzungsspeicher-Problem. Wenn Sie den Kommando durchführen:

xdpyinfo | grep backing

und die Ausgabe ist ähnlich:

options: backing-store NO, save-unders NO

dann müssen Sie Ergänzungsspeicher in Ihrer X Serverkonfiguration aktivieren.

Es gibt verschiedene Weisen damit das zu tun, je nach auf welchem System befinden Sie sich. Auf einem Linux System versuchen Sie die Linie einzufügen:

Option “backingstore”

in der Laufwerk-Abteilung der Ihrer X Serverkonfigurationsdatei (normally /etc/X11/XF86Config oder/etc/X11/XF86Config-4). Wechselweise können Sie Ihren X Server mit der Auswahl “+bs” durchführen, um dasselbe Ergebnis zu erhalten, ohne Ihre Konfigurationsdatei zu bearbeiten. Fangen Sie Ihren X Server wieder an, dann führen Sie das Xdpyinfo-Kommando wieder, um nachzuprüfen, dass Ergänzungsspeicher jetzt aktiviert wird.

Auf einem PC ausgeführten Hummingbird, führen Exceeds ” xconfig” Programm aus. Im xconfig Menü, klicken Sie auf “Performance” doppel. Überzeugen Sie sich “Save Unders” wird überprüft, setzen Sie “Maximum Backing Store” zu “Always”, setzen “Default Backing Store” zu “When Mapped” und setzen “Minimum Backing Store” zu “When Mapped”.

Dokumentationsfragen

44. Wo kann ich eine Liste mit aller PyNGL Ressourcen durchsuchen?

Auf URL gehen:

http://www.pyngl.ucar.edu/Resources/

45. Wo kann ich eine Liste mit aller PyNGL Funktionen durchsuchen?

Gehen Sie zu Funktionsauflistungen, verfügbar alphabetisch oder nach der Kategorie.

46. Wo kann ich einige Beispiele durchsuchen, wie soll man PyNGL verwenden?

Gehen Sie zu PyNGL Beispiel-Scripts.

_________________________________________________________________________________________________

PyNGL und PyNIO sind Produkte von Computational & Information Systems Laboratory beim National Center for Atmospheric Research, mit Support aus NSF
Contact webmaster