Mostrando entradas con la etiqueta grafica. Mostrar todas las entradas
Mostrando entradas con la etiqueta grafica. Mostrar todas las entradas

lunes, 14 de diciembre de 2020

SERVIDOR-Gráfico de datos de temperaturas -JavaScript

SERVIDOR

Gráfico de datos de temperaturas

JavaScript


Hace un año que tengo en mi servidor de Gráficas de datos meteorológicos realizado en Python haciendo uso de la librería matplotlib.
Se puede ver el gráfico de temperaturas diaria de Palencia en http://seta43.duckdns.org/seta/webcam/gradia.html.
En este caso, a nivel de programación, la gráfica se realiza en el servidor que crea los ficheros de imagen, los cuales se insertan en la página WEB.

Gráficos utilizando la librería matplotlib.

Existe otra forma de generar gráfica de datos, y esta es utilizando JavaScript.
Haciendo uso de la librería http://www.jqplot.com/ podemos hacer gráficas bastante vistosas.


Gráficos utilizando la librería jqplot.

index.html
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <title>TEMPERATURA PALENCIA</title>
        <link class="include" rel="stylesheet" type="text/css" href="jquery.jqplot.min.css" />
        <script class="include" type="text/javascript" src="jquery.min.js"></script>
        <script class="include" type="text/javascript" src="jquery.jqplot.min.js"></script>
    </head>
    <body>  
        <div align="left"> <h2><font color="#990000">Temperaturas Palencia</font></h2> </div> <br>
        <div id="ejemplo1" style="height:400px; width:700px;"></div>
        <script class="code" type="text/javascript">
            $(document).ready(function(){
              var lineaY = [];

//_________________________
var lineaYs = [9.4,9.2,9.2,9.2,9.2,9.3,9.1,9.1,9.1,9.1,9.0,8.9,8.8,8.8,8.8,8.7,8.7,8.7,8.8,8.8,8.8,8.9,
8.9,9.0,9.0,9.0,9.1,9.0,9.0,9.0,9.0,8.9,8.8,8.7,8.5,8.4,8.3,8.3,8.4,8.4,8.7,9.0,9.3,9.4,9.7,10.1,10.2,10.6,
10.8,11.1,11.3,12.2,12.3,12.3,11.8,11.8,12.1,12.0, ,11.6,11.5,11.2,10.8,10.8,10.9,10.8,10.7,10.8,11.0,
 , , , , , , , , , , , , , , , , , , , , , , , , , , ,]

//____________________________
var z=0;
for (var i=0; i<24; i+=0.25){    lineaY.push([i, lineaYs[z] ]);  z++; }
              var puntos = $.jqplot('ejemplo1', [lineaY],
                { 
                  title: 'GRÁFICO POR HORAS',                 
                  seriesDefaults:
                        {
                            showMarker: false,
                            rendererOptions:
                                {
                                smooth: true,
                                animation: { show: true    }
                                },                           
                        },   
                  series:
                      [
                        {showMarker:false},
                      ],
                  axes:
                        {
                            xaxis:{ label:'HORA', pad: 0 }, 
                            yaxis:{  label:'Temp.'  }
                        }
                });
            });
        </script>
     </body>
</html>
prugra.sh
#!/bin/bash
datecreated=`date`
echo "GENERANDO GRAFICOS JavaScript"
cp $HOME/www/webcam/datos.txt $HOME/www/prugra/datos.txt
cd $HOME/www/prugra
cat parte1.txt datos.txt parte3.txt > index.html

Después de muchas pruebas no he conseguido que javaScript cargue automática los datos desde un fichero.
He optado por una opción poco ortodoxa, unir mediante el comando cat 3 ficheros, la cabecera, los datos y el final de fichero, y de esta forma creamos el fichero index.html. Este fichero con código javaScript se ejecuta en el navegador, creando la gráfica.
El problema  de crear la gráfica con una librería de javaScript, es que se tiene que cargar la librería jqplot, y el tamaño de esta librería es de 260Kbytes. En estos tiempos no es mucho, pero debemos tener en cuenta el consumo  de datos.
Para hacer bonita la gráfica utilizo la opción animation: { show: true } que genera una animación en la creación de la gráfica.

El fichero de datos.txt se crea en el programa de python que obtiene los datos del sensor  gratem.py.
Podemos ver funcionando la página en:
    http://seta43.duckdns.org/seta/prugra/index.html

Espero que les haya gustado este artículo sobre creación de gráficos en una página web.


Saludos.
Juan Galaz

Bibliografía:

Gráficas de datos metereológicos
http://seta43.duckdns.org/seta/webcam/gradia.html.
http://www.jqplot.com/

martes, 11 de junio de 2019

Gráficas de datos metereológicos. Python. Generar página web.

Página principal

Gráficas de datos metereológicos.
Python.
Generar página web.


Continuamos con la serie de artículos sobre servidor web.
En el último artículo había creado un visualizador de temperatura, humedad y presión. Además de visualizar los datos, creaba un registro diario de los datos.
El archivo de los datos está bien, pero su visualización e interpretación es poco útil si no se ven los datos gráficamente.
En este artículo se representan los datos en dos gráficas, una de temperaturas por horas, y en la otra la representación de humedad y temperatura en función de la hora.
Aunque no soy muy partidario del lenguaje python, he de reconocer que se hace muy fácil trabajar con el debido a la gran cantidad de librerías que existen para casi cualquier cosa.
Para este programa hacemos uso de la librería matplotlib. Esta librería se emplea para hacer todo tipo de gráficas. La librería está muy extendida, además de disponer de mucha documentación y una excelente página web.
Con esta librería creamos las gráficas anteriormente mencionadas, para luego exportarlas como imágenes con formato  *.png. Las imágenes creadas será luego las que se visualizaran en la página web.

Lo primero que debemos hacer para crear una gráfica es tener los datos, estos datos los obtenemos del fichero diario con el nombre:
"Temp"+ time.strftime("%y_%m_%d")+".cvs"
Creamos una matriz donde se almacenan todos los datos de temperatura, humedad y presión, donde se ordenan por horas y minutos.
Debo de anotar que crear matrices en python es un poco peculiar, no existe la creación de matrices como en otros lenguajes, debemos crearlas añadiendo datos, es de lo mas frustrante, aunque tiene otras ventajas este lenguaje.

Crear una gráfica de cada minuto de las 24 horas del día es innecesario, lo he reducido a 10 datos cada hora, o lo que es lo mismo cada 6 minutos.
Creo otras listas con los datos que realmente voy a utilizar para la gráfica. En total serán 10 muestras por hora, y como son 24 horas, el total de datos representados serán 240.
Las listas de datos son la siguientes:
    listaTemp , listaHume, listaPres
Estas son las lista de datos que voy a proporcionar a la librería  matplotlib para que cree las gráficas.


Código de creación de la gráfica de temperatura.
fig = plt.figure()                                                              
ax = fig.add_subplot(1,1,1)
major_ticks = np.arange(0, 240, 30)                                             
ax.set_xticks(major_ticks)
ax.grid(which='major', alpha=1)

plt.xlabel("Temperatura DIA "+ time.strftime("%d_%m_20%y"))
plt.plot(listaTemp,color='red')
plt.xlim(0,240)
plt.ion()

my_dpi=75
plt.savefig("gra2.png",dpi=my_dpi)


Código de creación de la doble gráfica de humedad y presión.
fig, (ax1, ax2) = plt.subplots(2, sharex=True,)

plt.xlim(0,240)
ax1.plot(listaHume,color='blue')
ax1.set(ylabel='Humedad %')

plt.xlim(0,240)
ax2.plot(listaPres,color='green')
plt.setp(ax2.get_xticklabels(), fontsize=9)

major_ticks = np.arange(0, 240, 30)                                             
ax2.set_xticks(major_ticks)

ax2.set(ylabel='Bares')
plt.xlabel("HORA "+time.strftime("%H:%M"))

my_dpi=75
plt.savefig("gra1.png",dpi=my_dpi)

En las siguientes imágenes se pueden ver los gráficos creados.


  Gráficas pertenecientes a Palencia, ESPAÑA

Se puede estudiar las gráficas y observar el cambio de presión preludio de lluvia.
Después de la lluvia observamos también como aumenta la humedad en el ambiente.
Estas dos imágenes son las que se incorporan en la página web para hacer mucho mas intuitiva el estudio de los datos.

Para ejecutar el programa en python he creado un programa en bash llamado gratem.sh que se ejecuta cuando se inicia el ordenador.
gratem.sh
#!/bin/bash
echo "GENERANDO GRAFICOS"
cd $HOME/www/webcam
$HOME/www/webcam/gratem.py
Ya tenemos el script creado, pero nos falta que el script se ejecute cada 10 minutos.
Para esta tarea utilizaremos cron.  El comando cron es un administrador regular de procesos en segundo plano que viene de serie en linux.
Para añadir el comando que se debe ejecutar en segundo plano, utilizaremos el comando crontab -e  .
Editaremos de la siguiente forma:

    */10 * * * * /home/seta/www/webcam/gratem.sh > $HOME/tmp/cron.log 2>&1

De esta forma el script  de generación de gráficas se ejecutará cada 10 minutos.

Podéis comprobar el resultado en mi página:
http://seta43.duckdns.org/seta/webcam/gradia.html
http://seta43.ddns.net/seta/webcam/gradia.html
Espero que os guste este artículo, y que os sirva para vuestros proyectos.

PROGRAMAS

Saludos
Juan Galaz

Bibliografía:
https://matplotlib.org/index.html
https://claudiovz.github.io/scipy-lecture-notes-ES/intro/matplotlib/matplotlib.html
https://github.com/japp/Computacion-Cientifica/blob/master/graficos.rst



jueves, 14 de septiembre de 2017

Visualino

Visualino

Creador del programa Victor R. Ruiz.


Curiosa aplicación para hacer programas de arduino en forma gráfica.
Ir a la página web:  www.visualino.net
Bajar la versión de la distribución que tengáis, en mi caso ubuntu.
http://www.visualino.net/downloads/ubuntu/
La versión mas nueva es 0.7 , fecha 2016.
Instalar el programa, yo lo suelo hacer con gdeb.
Existe un tutorial en la página web que explica los pasos.
http://www.visualino.net/docs/ubuntu.es.html
Debemos de tener instalada la versión 1.6 de arduino , con la 1.8 no funciona bien.
La instalación de arduino debera ser similar a:
/home/Nombre de usuario/bin/arduino-1.6/
Dentro de ese directorio, deberá seleccionar el fichero ejecutable arduino.

Abrimos una consola y tecleamos visualino.
Si todo fue bien arrancará el programa.
En el menú  archivo->preferencias
    Cambiar el idioma.
    Cambiar IDE-      /home/usuario/bin/arduino-1.6.2/arduino
En la ventana principal seleccionar el tipo de placa (nano, uno,...) y la conexión (ttyUSB0 ,ttyUSB1)
Ya está todo para programarlo visualmente.


Saludos.
Juan Galaz