pywws.Plot

Tracciare i grafici dei dati meteo secondo un file di comandi 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

Introduzione

Come Template.py questo è uno dei più difficili moduli software da utilizzare della stazione meteo. Traccia un grafico o set di grafici di dati meteo. Quasi tutto ciò che riguarda il grafico è controllato da un file XML. Mi riferisco a questi file come modelli, ma non sono modelli nello stesso modo come Template.py viene utilizzato per creare file di testo.

Prima di scrivere i propri file di template grafici, potrebbe essere utile dare un’occhiata ad alcuni degli esempi nella directory example_graph_templates. Se (come me) non si ha familiarità con XML, vi suggerisco di leggere il W3 Schools XML tutorial.

Sintassi di file grafico XML

Qui è il più semplice modello grafico. Esso riporta la temperatura esterna per le ultime 24 ore.

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

In questo esempio, l’elemento radice è un elemento grafico, che ha un elemento secondario. Il tracciato secondario contiene un elemento title e un elemento ycalc. Per tracciare più dati sullo stesso sistema di assi (per esempio punto di rugiada e temperatura), possiamo aggiungere più elementi secondari. Per tracciare più di una serie di assi (per esempio la velocità del vento è misurata in unità diverse dalla temperatura) nello stesso file possiamo aggiungere ulteriori elementi del grafico.

La gerarchia degli elementi è mostrata di seguito.

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

Questo è l’elemento principale del file grafico XML. Essa non deve essere chiamato “graph”, ma ci deve essere esattamente un elemento radice.

plot

Ogni grafico deve contenere almeno un elemento grafico. Un grafico è disegnato per ogni elemento grafico, ma tutti condividono lo stesso asse X.

start

Questo elemento imposta la data e ora di inizio dell’asse X. È utilizzato nel costruttore di un oggetto Python data e ora. Ad esempio, per avviare il grafico a mezzogiorno (Ora locale) del giorno di Natale 2008: <start>year=2008, month=12, day=25, hour=12</start>. Il valore predefinito è (stop - duration).

stop

Questo elemento imposta la data e ora della fine dell’asse X. È utilizzato nel costruttore di un oggetto Python data e ora. Ad esempio, per terminare il grafico a 10 am (ora locale) del giorno di capodanno: <stop>year=2009, month=1, day=1, hour=10</stop>. Il valore predefinito è (start + duration), a meno che l’inizio non è definito in questo caso la data l’ultima lettura oraria della stazione meteo viene utilizzata.

duration

Questo elemento imposta la misura dell’asse X del grafico, a meno che non sono definite sia di inizio che fine . È utilizzato nel costruttore di un oggetto Python timedelta . Ad esempio, per tracciare una settimana: <duration>weeks=1</duration>. Il valore predefinito è ore=24.

layout

Controlla il layout dei grafici. Predefinita è una singola colonna. L’elemento layout specifica le righe e colonne. Ad esempio: <layout>4, 2</layout> verrà utilizzata una griglia di 4 righe e 2 colonne.

size

Imposta le dimensioni dell’ immagine contenente il grafico. Valore predefinito (in un layout a colonna singola) è una larghezza di 600 pixel e l’altezza di 200 pixel per ogni tracciato, così un grafico con i quattro elementi della trama sarebbe 600 x 800 pixel. Qualsiasi elemento deve includersi sia in larghezza che in altezza. Ad esempio: <size>800, 600</size> produrrà un’immagine di 800 pixel di larghezza e 600 pixel di altezza.

fileformat

Imposta il formato del del file contenente l’immagine del grafico. Predefinito è png. Dovrebbe fare qualsiasi stringa riconosciuta dalla vostra installazione di gnuplot. Ad esempio: <fileformat>gif</fileformat> produrrà un’immagine GIF.

terminal

‘terminal’ permette un controllo completo delle impostazioni di gnuplot . È possibile utilizzare questa opzione se si traccia con un insolito formato immagine. Qualsiasi stringa riconosciuta dall’installazione di gnuplot in ‘terminal’ viene eseguita. Ad esempio: <terminal>svg enhanced font "arial,9" size 600,800 dynamic rounded</terminal>. Questa impostazione sovrascrive le dimensioni del carattere e la dimensione del grafico.

lmargin

Imposta il margine sinistro dei tracciati, cioè la distanza dall’asse sinistro dal bordo sinistro della zona di immagine. Secondo la documentazione di gnuplot le unità di lmargin sono le larghezze di carattere. Il valore di default è 5, che dovrebbe apparire su OK nella maggior parte dei casi.

rmargin

Imposta il margine destro dei tracciati, cioè la distanza tra l’asse di destra e il bordo destro dell’area immagine. Secondo la documentazione di gnuplot le unità di rmargin sono le larghezze di carattere. Il valore predefinito è -1, che imposta la definizione automatica.

xformat

Imposta il formato delle etichette xtic data / ora. Il valore è una stringa in formato strftime. Dipende dalla durata grafico: se 24 ore o meno è “%H%M”, da 24 ore a 7 giorni è “%a %d” e 7 giorni o più è “%Y/%m/%d”.

xlabel

Imposta l’etichetta dell’asse X. Il valore è una stringa in formato strftime. Dipende dalla durata grafico: Se 24 ore o meno è “Time (%Z)”, da 24 ore a 7 giorni è “Day” e 7 giorni o più è “Date”.

dateformat

Imposta il formato delle etichette di data ad ogni estremità dell’asse X. Il valore è una stringa in formato strftime. L’impostazione predefinita è “%Y/%m/%d”. L’etichetta a destra del grafico è elaborato solo se diversa dalla sinistra. Per non avere etichette, impostare un formato vuoto: <dateformat></dateformat>

xtics

Imposta la spaziatura dei “tic” i segni sull’asse X. Il valore è un numero intero di ore. L’impostazione predefinita è di consentire a gnuplot di impostare un intervallo appropriato.

title

Imposta il titolo del grafico. Una singola linea di testo, per esempio: <title>Today's weather</title>. Questo titolo appare al vertice del grafico, fuori di qualsiasi area del tracciato.

subplot

Ogni elemento grafico deve contenere almeno un elemento sottotrama. Una traccia a parte è disegnata per ogni elemento sottotrama, ma tutti condividono gli stessi assi X e Y.

bmargin

Imposta il margine inferiore, ossia la distanza tra l’asse X e il bordo inferiore del grafico (o la trama successiva). L’impostazione predefinita è quella di lasciare a gnuplot di regolare automaticamente, che funziona bene per la maggior parte dei casi, ma si potrebbe desiderare di mettere a punto il valore per soddisfare la vostra installazione.

Il valore ammesso è un qualsiasi numero reale non negativo. Sulla mia configurazione 0.9 è un buon valore, impostare la seguente: <bmargin>0.9</bmargin>.

yrange

Imposta i limiti inferiore e superiore dell’ asse Y (sinistra). Il valore compreso da gnuplot, è tipicamente una coppia di numeri. L’impostazione predefinita è quella di consentire a gnuplot di impostare i valori appropriati, ed è improbabile che è quello che volete. Ad esempio, per tracciare il tipico grafico UK temperature senza nessun valore fuori del grafico: <yrange>-10, 30</yrange>. Nota che le virgole sono convertiti in due punti, in modo che `` <yrange> -10:30 </ YRange> `` è equivalente.

È possibile utilizzare un asterisco per lasciare a gnuplot scegliere un valore adeguato. Ad esempio, per avere la scala automatica del valore superiore mentre fissa il valore inferiore a zero, usare <yrange>0:*</yrange>.

y2range

Imposta i limiti inferiore e superiore dell’ asse Y di destra. Predefinito per il lato dell’asse Y destro è essere uguale all’asse di sinistra, ma per impostare un diverso range è utile in un grafico a doppio tracciato.

ytics

Controlla il “tic” segni sulla asse Y di sinistra. Il valore può essere tutto ciò che è compreso da gnuplot. Ad esempio, per impostare la spaziatura di 45 punti uso <y2tics>('N' 0, 'E' 90, 'S' 180, 'W' 270, 'N' 360)</y2tics>.

y2tics

Controlla il “tic” dei segni sul proprio asse. Il formato è lo stesso di quello per ytics. Comportamento predefinito è di copiare i segni di sinistra, ma senza etichette.

ylabel

Aggiunge un’etichetta a (sinistra) asse Y. Per esempio, quando la temperatura: <ylabel>°C</ylabel>. Se si utilizza ylabel probabilmente si desidera regolare lmargin.

ylabelangle

Regola l’angolo (lato sinistro) etichetta asse Y, se dalla versione di gnuplot è supportato. Ad esempio, per scrivere l’etichetta orizzontalmente: <ylabelangle>90</ylabelangle>.

y2label

Aggiunge un’etichetta a destra asse Y. Per esempio, quando riportando l’umidità: <y2label>%</y2label>. Questo è usato soprattutto per la stampa a doppi assi grafici. Se si utilizza y2label sarà probabilmente necessario regolare rmargin.

y2labelangle

Regola l’angolo della etichetta a destra asse Y, se è supportato dalla versione di gnuplot. Ad esempio, per scrivere l’etichetta orizzontalmente: <y2labelangle>90</y2labelangle>.

grid

Aggiunge una griglia di osservazione. Nella maggior parte dei casi la griglia predefinita di gnuplot è adatta, quindi non è necessario: <grid></grid>. Il controllo della griglia è possibile utilizzando una qualsiasi delle opzioni usate da gnuplot. Ad esempio, per le linee della griglia orizzontali è: <grid>ytics</grid>.

source

Selezionare i dati meteo da tracciare. I valori consentiti sono <source>raw</source>, <source>hourly</source>, <source>daily</source> e <source>monthly</source>. L’ impostazione predefinita è raw. Nota che le diverse fonti hanno diversi dizionari di dati, tale scelta ha effetto su ycalc.

boxwidth

Imposta la larghezza del “boxes” con i grafici a barre. Si tratta di un valore espressione intero producendo un numero di secondi. Il valore predefinito dipende dalla fonte: raw è 240, hourly è 2800 e ogni daily è 2.800 * 24.

title

Imposta il titolo della trama. Una singola riga di testo, ad esempio: <title>Temperatura (°C)</title>. Questo titolo viene visualizzato all’interno dell’area del tracciato, sopra qualsiasi titolo del tracciato.

command

Esegue qualsiasi comando di gnuplot, subito prima del principale comando “plot”. Questa opzione consente agli utenti avanzati di avere maggiore controllo sull’aspetto grafico. Il valore è qualsiasi comando valido gnuplot, iniziando in genere con il set di comandi. Ad esempio: <command>set key tmargin center horizontal width 1 noreverse enhanced autotitles box linetype -1 linewidth 1</command>. (Non mi chiedete che cosa fa questo esempio — io non sono un utente avanzato)

xcalc

Controlla il posizionamento dei valori sull’asse X dei dati tracciati. Il valore predefinito dei dati [‘idx’] è corretto per la maggior parte dei casi, ma ci sono alcune eccezioni. Ad esempio, durante la stampa dei grafici a barre di pioggia oraria, è bello centrare le barre sui 30 minuti dell’ora: <xcalc>data['idx'].replace(minute=30, second=0)</xcalc>.

ycalc

Seleziona i dati da stampare. Può essere utilizzata una qualsiasi linea di espressione Python che restituisce un singolo valore a virgola mobile . Nella sua forma più semplice questo seleziona solo un valore dalla “data” del dizionario, per esempio: <ycalc>data['temp_out']</ycalc> traccia la temperatura esterna. Espressioni più complesse sono possibili, e alcune funzioni di supporto sono fornite. Ad esempio: <ycalc>dew_point(data['temp_out'], data['hum_out'])</ycalc> traccia la temperatura esterna del punto di rugiada, e <ycalc>wind_mph(data['wind_ave'])</ycalc> traccia la velocità media del vento in miglia all’ora.

Tracciati cumulativi sono anche possibili. Il risultato di ogni calcolo ycalc sono conservati e messi a disposizione per il successivo calcolo dalla variabile last_ycalc. Questo può essere utilizzato con qualsiasi tipo di dati, ma è più utile con le precipitazioni:<ycalc>data['rain'] + last_ycalc</ycalc>.

axes

Seleziona quale asse Y i dati è in funzione. Per impostazione predefinita è sull’ asse sinistro, ma l’asse di destra può essere scelto con: <axes>x1y2</axes>. Questo può essere utilizzato in combinazione con y2 per tracciare due grandezze indipendenti su un grafico, ad esempio la temperatura e l’umidità.

style

Imposta lo stile della linea del grafico. Impostazione predefinita è una linea continua, liscia, spessore 1. Per selezionare un grafico a barre: <style>box</style>. Per selezionare i punti senza una linea di collegamento: <style>+</style> o <style>x</style>. Per selezionare uno spessore di linea 3 (per esempio) usate: <style>line 3</style>. Lo spessore dei punti può essere impostato in un modo simile. Per un controllo completo (per utenti avanzati) un pieno stile gnuplot può essere impostato: <style>smooth unique lc 5 lw 3</style>.

colour

Imposta il colore del subtracciato a linea o barre. Qualsiasi valore intero è accettato. La mappatura dei colori in numeri è impostato da gnuplot. Valore di default è il colore precedente più uno.

title

Imposta il titolo del secondario. Una singola riga di testo, ad esempio: <title>Temperature (°C)</title>. Questo titolo viene visualizzato nell’area di stampa, accanto a un breve tratto di linea del colore utilizzato per il tracciato.

Dettagli API

Funzioni

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

Calcola la temperatura apparente (sensazione reale), con formula da

cadhumidex(temp, humidity)

Calcolo Indice di umidità come per gli standard Canadian Weather Standards

dew_point(temp, hum)

Calcola il punto di rugiada, usando la formula da http://en.wikipedia.org/wiki/Dew_point.

illuminance_wm2(lux)

Conversione approssimativa di illuminazione in lux a radiazione solare in W/m2

main([argv])
pressure_inhg(hPa)

Converte la pressione da ettopascal/millibar in pollici di mercurio

pressure_trend_text(trend)

Converte in una stringa, la tendenza barometrica sono usati per la UK met office.

rain_inch(mm)

Converte le precipitazioni da millimetri a pollici

temp_f(c)

Converte la temperatura da gradi Celsius a Fahrenheit

usaheatindex(temp, humidity, dew)

Calcolare l’indice di calore secondo Standards USA National Weather Service

wind_bft(ms)

Converte i metri al secondo del vento in scala Beaufort

wind_chill(temp, wind)

Calcola il vento gelido, usando la formula di

wind_kmph(ms)

Converte il vento da metri al secondo a chilometri orari

wind_kn(ms)

Converte il vento da metri al secondo a nodi

wind_mph(ms)

Converte il vento da metri al secondo a miglia all’ora

winddir_degrees(pts)

Convertire la direzione del vento a 0..15 in gradi

winddir_text(pts)

Convertire direzione del vento da 0 .. 15 per i punti della bussola

Classi

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

Differenza tra due valori datetime.

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