### Navigazione

- indice
- moduli |
- successivo |
- precedente |
- pywws 13.12.dev1118 documentation »
- Programmi Python e moduli »

# 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
`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) | Convertire in una stringa carattere l’andamento della pressione, come utilizzata dal 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` | datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
`timedelta` | Differenza tra due valori datetime.

class `pywws.Plot.``BasePlotter`(params, status, raw_data, hourly_data, daily_data, monthly_data, work_dir)
  `DoPlot`(input_file, output_file)
  `GetChildren`(node, name)
  `GetValue`(node, name, default)

class `pywws.Plot.``Record`

class `pywws.Plot.``GraphPlotter`(params, status, raw_data, hourly_data, daily_data, monthly_data, work_dir)
  `GetPlotList`()
  `GetDefaultRows`()
  `GetDefaultPlotSize`()
  `GetPreamble`()
  `PlotData`(plot_no, plot, source)

`pywws.Plot.``main`(argv=None)

### Navigazione

- indice
- moduli |
- successivo |
- precedente |
- pywws 13.12.dev1118 documentation »
- Programmi Python e moduli »