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]¶