pywws.Plot

Trace les graphes de données météorologiques selon une recette XML.

usage: python -m pywws.Plot [options] data_dir temp_dir xml_file output_file
options are:
 -h or --help    display this help
data_dir is the root directory of the weather data
temp_dir is a workspace for temporary files e.g. /tmp
xml_file is the name of the source file that describes the plot
output_file is the name of the image file to be created e.g. 24hrs.png

Introduction

Comme Template.py celui-ci est un des modules les plus difficiles à utiliser dans le logiciel de collecte de la station météo. Il trace un graphe (ou un ensemble de graphes) de données météorologiques. Presque tout le graphe est contrôlé par un fichier XML. Je me réfère à ces fichiers en tant que modèles, mais ils ne sont pas des gabarits dans le même sens que Template.py les utilise pour créer des fichiers texte.

Avant d’écrire vos propres fichiers de gabarit de graphe, il pourrait être utile d’examiner quelques exemples dans le répertoire example_graph_templates. Si (comme moi) vous n’êtes pas familier avec le langage XML, je vous suggère de lire le tutoriel XML du Site du Zéro.

Syntaxe XML du fichier graphe

Voici le modèle de graphe utile le plus simple. Il trace la température extérieure pendant les 24 dernières heures.

<?xml version="1.0" encoding="ISO-8859-1"?>
<graph>
  <plot>
    <subplot>
      <title>Temperature (°C)</title>
      <ycalc>data['temp_out']</ycalc>
    </subplot>
  </plot>
</graph>

Dans cet exemple, l’élément racine du graphe a un élément de tracé, lequel a un élément graphe secondaire. L’élément graphe secondaire contient un élément de titre et un élément ycalc. Pour tracer davantage de données sur le même ensemble d’axes (par exemple le point de rosée et la température), on peut ajouter plus d’éléments sous-graphe. Pour tracer plus d’un ensemble d’axes (par exemple la vitesse du vent qui est mesurée en unités différentes de la température) dans le même fichier, nous pouvons ajouter plus d’éléments de graphe.

La hiérarchie complète de l’élément est illustré ci-dessous.

graph
    plot
        subplot
            xcalc
            ycalc
            axes
            style
            colour
            title
        bmargin
        yrange
        y2range
        ytics
        y2tics
        ylabel
        ylabelangle
        y2label
        y2labelangle
        grid
        source
        boxwidth
        title
        command
    start
    stop
    duration
    layout
    size
    fileformat
    terminal
    lmargin
    rmargin
    xformat
    xlabel
    dateformat
    xtics
    title

graph

C’est l’élément racine du fichier XML de graphe. Il n’a pas à être appelé “graph ”, mais il doit y avoir exactement un élément racine.

plot

Chaque élément graphe doit contenir au moins un élément de tracé. Un graphe distinct est établi pour chaque élément de tracé, mais tous partagent le même axe X.

start

Cet élément règle la date et l’heure de départ de l’axe X. Il est utilisé pour la construction d’un élément Python datetime. Par exemple, pour démarrer le graphe à midi (heure locale), le jour de Noel 2008: <start>year=2008, month=12, day=25, hour=12</start>. La valeur par défaut est (stop - duration).

stop

Cet élément règle la date et l’heure de fin de l’axe X. Il est utilisé pour la construction d’un élément Python datetime. Par exemple, pour terminer le graphe à 10h am (heure locale), le jour du Nouvel An: <stop>year=2009, month=1, day=1, hour=10</stop>. La valeur par défaut est (start + duration), à moins que start ne soit pas définit dans lequel cas l’horodate de la dernière lecture horaire de la station météo est employée.

duration

Cet élément définit l’étendue de l’axe X du graphique, à moins que start (début) et stop (arrêt) soient tous deux définis. Il est utilisé dans le construction d’un objet Python timedelta. Par exemple, pour tracer une semaine: <duration>weeks=1</duration>. La valeur par défaut est hours=24.

layout

Contrôle la disposition des tracés. Par défaut sur une seule colonne. L’élément de mise en page définit les lignes et les colonnes. Par exemple: <layout>4, 2</layout> utilisera une grille de 4 lignes et 2 colonnes.

size

Définit les dimensions globales du fichier image contenant le graphe. Par défaut (dans une mise en page à simple colonne) une largeur de 600 pixels et une hauteur de 200 pixels pour chaque tracé est employé, donc la dimension d’un graphe avec quatre éléments tracés serait de 600 x 800 pixels. Tout élément de taille doit inclure à la fois la largeur et la hauteur. Par exemple: <size>800, 600</size> produira une image 800 pixels de large et 600 pixels de haut.

fileformat

Définit le format du fichier d’image contenant le graphe. Par défaut png. Toute chaîne reconnue par votre installation de gnuplot peut convenir. Par exemple: <fileformat>gif</fileformat> va produire une image GIF.

terminal

Permet un contrôle complet des paramètres ‘terminal’ de gnuplot. Vous pouvez utiliser cette option si vous tracez un format d’image inhabituel. Toute chaîne reconnue par la commande ‘terminal’ de votre installation gnuplot devrait faire. Par exemple: <terminal>svg enhanced font "arial,9" size 600,800 dynamic rounded</ terminal>. Ce paramètre spécifie à la fois la taille et le format de fichier.

lmargin

Définit la marge gauche des graphes, c’est à dire la distance entre l’axe de gauche sur le bord gauche de la zone de l’image. Selon la documentation de gnuplot les unités de lmargin sont des largeurs de caractères. La valeur par défaut est de 5, ce qui devrait être OK dans la plupart des circonstances.

rmargin

Définit la marge droite des graphes, c’est à dire la distance entre l’axe de droite à l’extrémité droite de la zone d’image. Selon la documentation de gnuplot les unités de rmargin sont des largeurs de caractères. La valeur par défaut est -1, ce qui spécifie le réglage automatique.

xformat

Définit le format des étiquettes de date / heure xtic. La valeur est une chaîne de style format strftime. Par défaut elle dépend de la durée du graphe: 24 heures ou moins est “%H%M”, 24 heures sur 7 jours est “%a% d” et 7 jours ou plus est “%Y/%m/%d”.

xlabel

Définit l’étiquette d’axe X. La valeur est une chaîne de style format strftime. Par défaut dépend de la durée du graphe: 24 heures ou moins est “Time (%Z)”, de 24 heures à 7 jours est «Day» et 7 jours ou plus est «Date». Le datetime utilisé pour calculer ce départ, ce qui peut produire des résultats inattendus lorsqu’un graphique s’étend de début ou de fin DST.

dateformat

Définit le format des étiquettes de date à chaque extrémité de l’axe X. La valeur est une chaîne de style format strftime. Par défaut est “%Y/%m/%d”. L’étiquette de droite est uniquement affichée si elle diffère de la gauche. Pour avoir aucune étiquette, définissez un format vide: <dateformat></dateformat>

xtics

Définit l’espacement des “tic” des marques sur l’axe X. La valeur est un nombre entier d’heures. La valeur par défaut est de laisser gnuplot définir l’intervalle approprié.

title

Définit le titre du graphe. Une seule ligne de texte, par exemple: <title>La météo du jour</ title>. Ce titre apparaît tout en haut du graphe, en dehors de toute zone de traçage.

subplot

Chaque élément du graphe doit contenir au moins un élément graphe secondaire. Une tracé distinct est établi pour chaque élément sous-graphe, mais tous partagent les même axes X et Y.

bmargin

Définit la marge inférieure, c’est à dire la distance entre la partie inférieure de l’axe X et le bord du graphique (ou le graphe suivante). La valeur par défaut est de laisser gnuplot ajuster automatiquement, ce qui fonctionne bien la plupart du temps, mais vous pouvez ajuster la valeur en fonction de votre installation.

La valeur autorisée est un nombre non négatif réel. Sur mon installation 0.9 est une bonne valeur, définie comme suit: <bmargin> 0.9</ bmargin>.

yrange

Définit les limites inférieure et supérieure de l’axe Y gauche. La valeur est tout ce qui est recconnu par gnuplot, généralement une paire de nombres. La valeur par défaut est de permettre à gnuplot de définir les valeurs appropriées, ce qui est peu susceptible d’être ce que vous voulez. Par exemple, pour tracer des températures typiques du Royaume-Uni sans valeur va hors du graphe: <yrange>-10, 30</yrange>. Notez que les virgules sont converties en deux points, donc <yrange>10:30</ yrange> serait équivalent.

Vous pouvez utiliser un astérisque pour laisser gnuplot choisir une valeur appropriée. Par exemple, pour automatiser l’échelle de valeur supérieure, tout en fixant la valeur inférieure à zéro, utilisez <yrange>0:*</yrange>.

y2range

Définit les limites inférieure et supérieure de l’axe Y de droite. Le défaut est pour l’axe Y de droite d’être la même que celle de gauche, mais fixer une plage différente est utile en double axe de traçage.

ytics

Contrôle les “tic” des marques sur l’axe Y de gauche. La valeur peut être tout ce qui est compris par gnuplot. Par exemple, pour définir l’espacement tic à 45 utiliser <ytics>45</ ytics>. Des choses plus complexes sont également possibles, par exemple étiqueter un diagramme de direction du vent avec des points de boussole, utilisez <y2tics>('N' 0, 'E' 90, 'S' 180, 'W' 270, 'N' 360)</ y2tics>.

y2tics

Contrôle les “tic” des marques sur l’axe de droite. Le format est le même que celui de ytics. Le comportement par défaut consiste à copier les marques de graduation de gauche, mais sans étiquette.

ylabel

Ajoute une étiquette à gauche de l’axe Y. Par exemple, lors du tracé de la température: <ylabel>°C</ylabel>. Si vous utilisez ylabel vous voudrez probablement ajuster lmargin.

ylabelangle

Ajuste l’angle de l’étiquette à gauche de l’axe Y, si votre version de gnuplot le soutient. Par exemple, pour écrire l’étiquette horizontalement: <ylabelangle>90</ylabelangle>.

y2label

Ajoute une étiquette à l’axe Y de droite. Par exemple, lors du tracé de l’humidité: <y2label>%</y2label>. Cela est principalement utilisé lors du traçage de graphes à deux axes. Si vous utilisez y2label vous voudrez probablement ajuster rmargin.

y2labelangle

Ajuste l’angle de l’étiquette d’axe Y à droite, si votre version de gnuplot le permet. Par exemple, pour écrire l’étiquette horizontalement: <y2labelangle>90</ y2labelangle>.

grid

Ajoute une grille au tracé. Dans la plupart des situations, la grille par défaut de gnuplot est appropriée, si aucune valeur n’est nécessaire: <grid></grid>. Plus de contrôle est possible en utilisant l’une des options comprises par la commande set grid de gnuplot. Par exemple, pour avoir les lignes horizontales de la grille uniquement: <grid>ytics</grid>.

source

Sélectionne les données météorologiques à tracer. Les valeurs autorisées sont <source>raw</source>, <source> hourly</ source>, <source>daily</source> et <source>monthly</source>. LA valeur par défaut est raw. Notez que les sources différentes ont des dictionnaires de données différents, donc ce choix affecte ycalc.

boxwidth

Définit la largeur des “boîtes” utilisés lors de l’élaboration des graphes à barres. La valeur est une expression entière pour obtenir un nombre de secondes. Le défaut dépend de la source: brut est de 240, horaire est de 2800 et quotidien est de 2800 * 24.

title

Définit le titre du graphe. Une seule ligne de texte, par exemple: <title>Température (°C)</ title>. Ce titre apparaît dans la zone de traçage, au-dessus de tous les titres sous-graphes.

command

Exécute n’importe quelle commande gnuplot, juste avant la principale commande de tracé. Cette option permet aux utilisateurs avancés d’avoir plus de contrôle sur l’apparence du graphe. La valeur est une commande gnuplot valide, généralement commençant par un ensemble de mots. Par exemple: <command>set key tmargin center horizontal width 1 noreverse enhanced autotitles box linetype -1 linewidth 1</ command>. (Ne me demandez pas ce que cet exemple produit - Je ne suis pas un utilisateur avancé).

xcalc

Contrôle le positionnement de l’axe X du tracé des valeurs de données. La valeur par défaut de data[‘idx’] est correcte pour la plupart des données, mais il y a quelques exceptions. Par exemple, lors du tracé des diagrammes à barres de pluies horaires, il est bon de centrer les barres sur 30 minutes après l’heure: <xcalc>data ['idx'].replace(minute=30, second=0)</ xcalc>.

ycalc

Sélectionne les données à tracer. Toute expression Python sur une ligne retournant une valeur flottante simple peut être utilisée. Au plus simple ceci sélectionne une seule valeur du dictionnaire “data”, par exemple: <ycalc>data['temp_out']</ycalc> trace la température extérieure. Des expressions plus complexes sont possibles, et certaines fonctions d’aide sont fournies. Par exemple: <ycalc>dew_point(data['temp_out'], data['hum_out'])</ ycalc> trace le point de rosée, et <ycalc>wind_mph(data['wind_ave'])</ycalc> trace la vitesse moyenne du vent en miles par heure.

Les courbes cumulatives sont également possibles. Le résultat de chaque calcul ycalc est stocké et mis à la disposition du calcul suivant dans la variable last_ycalc. Ceci peut être utilisé avec toute donnée, mais il est plus utile avec des précipitations: <ycalc>data ['rain'] + last_ycalc</ ycalc>.

axes

Sélectionne contre quel axe Y les données sont tracées. Par défaut c’est l’axe de gauche, mais l’axe de droite peut être choisie avec: <axes>x1y2</ axes>. Ceci peut être utilisé en conjonction avec y2range pour tracer deux quantités indépendantes sur une courbe, par exemple la température et de l’humidité.

style

Définit le style de ligne pour le graphe. Le défaut est une ligne continue lisse, d’épaisseur 1. Pour sélectionner un graphique à barres, utilisez: <style>box</ style>. Pour sélectionner des points sans ligne de raccordement, utilisez: <style>+</ style> ou <style>x</ style>. Pour sélectionner une épaisseur de ligne à 3 (par exemple): <style>line 3</ style>. L’épaisseur des points peut être réglé de la même façon. Pour un contrôle complet (pour utilisateurs avancés) un style gnuplot complet peut être réglé ainsi: <style>smooth unique lc 5 lw 3</ style>.

colour

Définit la couleur de la ligne de sous-graphe ou des boîtes. Toute valeur entière est acceptée. La charte des couleurs est fixée par gnuplot. La valeur par défaut est la couleur précédente plus un.

title

Définit le titre du sous-graphe. Une seule ligne de texte, par exemple: <title>Température (°C)</ title>. Ce titre apparaît dans la zone de graphe, à côté d’un court segment de la couleur de la ligne utilisée pour le sous-graphe.

API détaillé

Fonctions

ApplicationLogger(verbose[, logfile])
apparent_temp(temp, rh, wind)

Calcule la température apparente (sensation réelle), en utilisant la formule de

cadhumidex(temp, humidité)

Calcule l’Indice d’Humidité selon les Normes Météo Canadiennes

dew_point(temp, hum)

Calcule le point de rosée, en utilisant la formule provenant de http://en.wikipedia.org/wiki/Dew_point.

illuminance_wm2(lux)

Conversion approximative de la luminosité en lux, au rayonnement solaire en W/m2

main([argv])
pressure_inhg(hPa)

Converti la pression de hectopascals/millibars, à pouces de mercure

pressure_trend_text(trend)

Converti la tendance de la pression en une chaîne, telle qu’utilisée par le UK Met Office.

rain_inch(mm)

Converti les précipitations de millimètres, à pouces

temp_f(c)

Converti la température de Celsius, à Fahrenheit

usaheatindex(temp, humidité, point de rosée)

Calcule l’Indice de Chaleur selon les normes du Service Météorologique National USA

wind_bft(ms)

Converti la vitesse du vent de mètres par seconde, vers l’échelle Beaufort

wind_chill(temp, vent)

Calcule le refroidissement éolien, en utilisant la formule de

wind_kmph(ms)

Converti la vitesse du vent de mètres par seconde, à kilomètres par heure

wind_kn(ms)

Converti la vitesse du vent de mètres par seconde, à noeuds

wind_mph(ms)

Converti la vitesse du vent de mètres par seconde, en miles par heure

winddir_degrees(pts)

Converti la direction du vent de 0..15 en degrés

winddir_text(pts)

Converti la direction du vent de 0..15, en points cardinaux

Classes

BasePlotter(params, status, raw_data, ...)
GraphPlotter(params, status, raw_data, ...)
Record
datetime(year, month, day[, hour[, minute[, ...) The year, month and day arguments are required.
timedelta

Différence entre deux valeurs de datetime.

class pywws.Plot.BasePlotter(params, status, raw_data, hourly_data, daily_data, monthly_data, work_dir)[source]
DoPlot(input_file, output_file)[source]
GetChildren(node, name)[source]
GetValue(node, name, default)[source]
class pywws.Plot.Record[source]
class pywws.Plot.GraphPlotter(params, status, raw_data, hourly_data, daily_data, monthly_data, work_dir)[source]
GetPlotList()[source]
GetDefaultRows()[source]
GetDefaultPlotSize()[source]
GetPreamble()[source]
PlotData(plot_no, plot, source)[source]
pywws.Plot.main(argv=None)[source]