Programa que muestra como crear un grafico en formato Gif con
Gnuplot de una serie temporal que se guarda en un fichero Bdt de Tol
(shows how to write a gif chart using Gnuplot from a single time serie
stored in a Tol Bdt file).
Es un programa que se ejecuta de forma lineal en el que no se declaran
funciones Tol.
Este programa realiza las siguientes acciones:
a) Define un conjunto temporal (TimeSet) semanal, de lunes a domingo,
determinado por los lunes, esto es, por el WD(1).
b) Define todos los ficheros necesarios,
de datos para Gnuplot,
de instrucciones para Gnuplot,
del grafico que generara Gnuplot,
de la semilla, template, de la pagina Html,
de la pagina Html que visualiza el grafico generado con Gnuplot y
del documento Pdf que se genera a partir de la anterior pagina Html.
c) Define una semilla, template, de mandatos de Gnuplot.
e) Lee los datos de la serie temporal con la funcion Tol IncludeBDT().
f) Establede los formatos de datos y fechas adecuados para Gnuplot.
g) Crea el fichero de mandatos Gnuplot a partir de la semilla anterior.
h) Ejecuta Gnuplot con los datos y los mandatos
i) Crea la pagina Html incluyendo el grafico Gnuplot a partir de la
anterior semilla Html.
k) Crea un documento Pdf a partir de la pagina Html.
Gnuplot.Test pruebas de graficos de series temporales con Gnuplot
Constantes
TimeSet WeeklyText filDatText filGplText filGifText filSedText filHtmText filPdfText ploSedInclusiones
Set serSetProceso
Text dteFmtText datFmtSet wriDatText resFmtText iniTxtText endTxtText serNamText cmdGlpReal runGplText wriHtmReal runPdf//////////////////////////////////////////////////////////////////////////////
TimeSet Weekly = WD(1);
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Conjunto temporal semanal, de lunes a domingo, determinado por los lunes,
WD(1).
Usualmente este conjunto temporal ya suele estar definido en Tol.",
Weekly);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text filDat = "gnuplot.03.dat";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Fichero de datos para Gnuplot.",filDat);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text filGpl = Replace(filDat, ".dat", ".gpl");
//////////////////////////////////////////////////////////////////////////////
PutDescription("Fichero de instrucciones para Gnuplot.",filGpl);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text filGif = Replace(filDat, ".dat", ".gif");
//////////////////////////////////////////////////////////////////////////////
PutDescription("Fichero del grafico que generara Gnuplot.",filGif);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text filSed = Replace(filDat, ".dat", ".sed"); // Html seed file
//////////////////////////////////////////////////////////////////////////////
PutDescription("Semilla, template, de la pagina Html.",filSed);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text filHtm = Replace(filDat, ".dat", ".htm"); // Html file
//////////////////////////////////////////////////////////////////////////////
PutDescription("Fichero de la pagina Html.",filHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text filPdf = Replace(filDat, ".dat", ".pdf"); // Pdf file
//////////////////////////////////////////////////////////////////////////////
PutDescription("Fichero del documento en formato Pdf.",filPdf);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text ploSed =
"
set term gif font 'arial' 18 size SIZWID, SEDHEI
set output 'FILGIF'
set datafile separator ';'
set title 'GRATIT' textcolor lt 3 font 'arial,18'
set style data lines
set timefmt '%d/%m/%Y'
set xdata time
set xlabel 'LABELX' textcolor lt 3 font 'arial,18' offset 0, -2
set xrange [ 'DTEINI':'DTEEND' ]
set xtics rotate by 90 offset 0, -4
set format x '%d/%m/%Y'
set ylabel 'LABELY' textcolor lt 3 font 'arial,18'
set yrange [ 0 : ]
set format y '%g'
set grid
set key left
plot 'FILDAT' using 1:2 t 'SERNAM'
reset
";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Prototipo de mandatos Gnuplot.",ploSed);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set serSet = IncludeBDT("gnuplot.03.bdt");
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Leer el fichero de datos en formato Bdt la serie temporal UniqueUsers.",
serSet);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text dteFmt = PutTableDateFormat("%d/%m/%Y");
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Cambiar el formato de fechas para Gnuplot, dteFmt recuerda el valor previo
del formato antes de cambiarlo.",
dteFmt);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text datFmt = PutRealFormat("%0.2lf");
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Cambiar el formato de reales para Gnuplot, datFmt recuerda el valor previo
del formato antes de cambiarlo.",
datFmt);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set wriDat = BDTFile(serSet, // Set of time series
filDat, // Data file for Gnuplot
"#Weekly;UniqueUsers", // # means comments
TRUE, // Overwrite
";", // Column separator
"\n"); // Lines separator (not ;\n)
//////////////////////////////////////////////////////////////////////////////
PutDescription("Escribir los datos para Gnuplot.",wriDat);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text resFmt =
{
WriteLn("Previous formats: ["+dteFmt+"|"+datFmt+"]");
PutTableDateFormat(dteFmt);
PutRealFormat(datFmt)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Restaurar los formato de fechas y reales.
Realmente no es necesario, solo se haca aqui por disciplina.",
resFmt);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text iniTxt = FormatDate(First(UniqueUsers), "%d/%m/%Y");
//////////////////////////////////////////////////////////////////////////////
PutDescription("Texto con la primera fecha de la serie UniqueUsers.",iniTxt);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text endTxt = FormatDate(Last (UniqueUsers), "%d/%m/%Y");
//////////////////////////////////////////////////////////////////////////////
PutDescription("Texto con la ultima fecha de la serie UniqueUsers.",endTxt);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text serNam = Name(UniqueUsers);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Nombre de la serie temporal UniqueUsers.",serNam);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text cmdGlp =
{
Text cmdRep = ReplaceTable(ploSed, // Build the Gnuplot commands text
[[ [["SIZWID", "1600"]], [["SEDHEI", "1000"]],
[["FILGIF", filGif]],
[["GRATIT", "Demo: BDT to GIF Chart"]],
[["LABELX", "Weeks"]],
[["DTEINI", iniTxt]], [["DTEEND", endTxt]],
[["LABELY", serNam]],
[["FILDAT", filDat]],
[["SERNAM", serNam]] ]], 1);
Text WriteFile(filGpl, cmdRep); // Write the Gnuplot commands file
cmdRep // Returns de commands text
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Escribe el fichero de mandatos para Gnuplot sustituyendo en la semilla de
fichero de mandatos las etiquetas por los valores precisos.",
cmdGlp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real runGpl =
{
Text cmdExe = "..\\..\\Bin\\gnuplot\\bin\\pgnuplot";
Text cmdTxt = cmdExe+" "+filGpl;
System(cmdTxt) // Execute gnuplot
};
//////////////////////////////////////////////////////////////////////////////
PutDescription("Ejecuta Gnuplot con su fichero de mandatos.",runGpl);
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
Text wriHtm =
{
Text codHtm = ReplaceTable(ReadFile(filSed),
[[ [["SIZWID", "800"]], [["SEDHEI", "500"]],
[["FILGIF", filGif]],
[["PLOCOD", cmdGlp]] ]], 1); // Inserts Gnuplot commands
Text WriteFile(filHtm, codHtm) // Makes a Html page from a seed
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Escribe el fichero de la pagina Html sustituyendo en la semilla Html
las etiquetas por los valores precisos.",
wriHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real runPdf =
{
Text pdfExe = "\""+
"C:\\Program Files\\HTML2PDF Pilot\\HTML2PDF_Pilot.exe"+
"\"";
Text absPth = Replace(Ois.AutoPath("."), "/", "\\"); // Absolute path
Text pdfInp = absPth+"\\"+filHtm; // Html input file
Text pdfOut = absPth+"\\"+filPdf; // Pdf output file
Text pdfCmd = pdfExe+" "+ // Executable pdf convertor
pdfInp+" "+ // Input file
pdfOut+" "+ // Output file
" /margin-left 10"+
" /margin-right 10"+
" /psize A4"+
" /jpeg 100";
// Makes a Pdf file from the Html page
System(pdfCmd) // Execute html to pdf conversion
};
//////////////////////////////////////////////////////////////////////////////
PutDescription("Conversor de Html a Pdf.",runPdf);
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nGnuplot.Test make: end");
//////////////////////////////////////////////////////////////////////////////
// FILE : make.tol
// AUTHOR : http://www.asolver.com
// CLASS : Series; Gnuplot; Pdf
// VERSION : Tol 1.1.5; Tol 1.1.6; Tol 2.0.1
// PURPOSE : Programa que muestra como crear un grafico en formato Gif con
// Gnuplot de una serie temporal que se guarda en un fichero Bdt de Tol
// (shows how to write a gif chart using Gnuplot from a single time serie
// stored in a Tol Bdt file).
//
// Es un programa que se ejecuta de forma lineal en el que no se declaran
// funciones Tol.
// _
// Este programa realiza las siguientes acciones:
// a) Define un conjunto temporal (TimeSet) semanal, de lunes a domingo,
// determinado por los lunes, esto es, por el WD(1).
// b) Define todos los ficheros necesarios,
// de datos para Gnuplot,
// de instrucciones para Gnuplot,
// del grafico que generara Gnuplot,
// de la semilla, template, de la pagina Html,
// de la pagina Html que visualiza el grafico generado con Gnuplot y
// del documento Pdf que se genera a partir de la anterior pagina Html.
// c) Define una semilla, template, de mandatos de Gnuplot.
// e) Lee los datos de la serie temporal con la funcion Tol IncludeBDT().
// f) Establede los formatos de datos y fechas adecuados para Gnuplot.
// g) Crea el fichero de mandatos Gnuplot a partir de la semilla anterior.
// h) Ejecuta Gnuplot con los datos y los mandatos
// i) Crea la pagina Html incluyendo el grafico Gnuplot a partir de la
// anterior semilla Html.
// k) Crea un documento Pdf a partir de la pagina Html.
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// CONSTANTS
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nGnuplot.Test make: begin");
//////////////////////////////////////////////////////////////////////////////
TimeSet Weekly = WD(1);
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Conjunto temporal semanal, de lunes a domingo, determinado por los lunes,
WD(1).
Usualmente este conjunto temporal ya suele estar definido en Tol.",
Weekly);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text filDat = "gnuplot.03.dat";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Fichero de datos para Gnuplot.",filDat);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text filGpl = Replace(filDat, ".dat", ".gpl");
//////////////////////////////////////////////////////////////////////////////
PutDescription("Fichero de instrucciones para Gnuplot.",filGpl);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text filGif = Replace(filDat, ".dat", ".gif");
//////////////////////////////////////////////////////////////////////////////
PutDescription("Fichero del grafico que generara Gnuplot.",filGif);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text filSed = Replace(filDat, ".dat", ".sed"); // Html seed file
//////////////////////////////////////////////////////////////////////////////
PutDescription("Semilla, template, de la pagina Html.",filSed);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text filHtm = Replace(filDat, ".dat", ".htm"); // Html file
//////////////////////////////////////////////////////////////////////////////
PutDescription("Fichero de la pagina Html.",filHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text filPdf = Replace(filDat, ".dat", ".pdf"); // Pdf file
//////////////////////////////////////////////////////////////////////////////
PutDescription("Fichero del documento en formato Pdf.",filPdf);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text ploSed =
"
set term gif font 'arial' 18 size SIZWID, SEDHEI
set output 'FILGIF'
set datafile separator ';'
set title 'GRATIT' textcolor lt 3 font 'arial,18'
set style data lines
set timefmt '%d/%m/%Y'
set xdata time
set xlabel 'LABELX' textcolor lt 3 font 'arial,18' offset 0, -2
set xrange [ 'DTEINI':'DTEEND' ]
set xtics rotate by 90 offset 0, -4
set format x '%d/%m/%Y'
set ylabel 'LABELY' textcolor lt 3 font 'arial,18'
set yrange [ 0 : ]
set format y '%g'
set grid
set key left
plot 'FILDAT' using 1:2 t 'SERNAM'
reset
";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Prototipo de mandatos Gnuplot.",ploSed);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// INCLUDE
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set serSet = IncludeBDT("gnuplot.03.bdt");
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Leer el fichero de datos en formato Bdt la serie temporal UniqueUsers.",
serSet);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// MAKE
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nGnuplot.Test make: process");
//////////////////////////////////////////////////////////////////////////////
Text dteFmt = PutTableDateFormat("%d/%m/%Y");
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Cambiar el formato de fechas para Gnuplot, dteFmt recuerda el valor previo
del formato antes de cambiarlo.",
dteFmt);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text datFmt = PutRealFormat("%0.2lf");
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Cambiar el formato de reales para Gnuplot, datFmt recuerda el valor previo
del formato antes de cambiarlo.",
datFmt);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set wriDat = BDTFile(serSet, // Set of time series
filDat, // Data file for Gnuplot
"#Weekly;UniqueUsers", // # means comments
TRUE, // Overwrite
";", // Column separator
"\n"); // Lines separator (not ;\n)
//////////////////////////////////////////////////////////////////////////////
PutDescription("Escribir los datos para Gnuplot.",wriDat);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text resFmt =
{
WriteLn("Previous formats: ["+dteFmt+"|"+datFmt+"]");
PutTableDateFormat(dteFmt);
PutRealFormat(datFmt)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Restaurar los formato de fechas y reales.
Realmente no es necesario, solo se haca aqui por disciplina.",
resFmt);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text iniTxt = FormatDate(First(UniqueUsers), "%d/%m/%Y");
//////////////////////////////////////////////////////////////////////////////
PutDescription("Texto con la primera fecha de la serie UniqueUsers.",iniTxt);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text endTxt = FormatDate(Last (UniqueUsers), "%d/%m/%Y");
//////////////////////////////////////////////////////////////////////////////
PutDescription("Texto con la ultima fecha de la serie UniqueUsers.",endTxt);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text serNam = Name(UniqueUsers);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Nombre de la serie temporal UniqueUsers.",serNam);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text cmdGlp =
{
Text cmdRep = ReplaceTable(ploSed, // Build the Gnuplot commands text
[[ [["SIZWID", "1600"]], [["SEDHEI", "1000"]],
[["FILGIF", filGif]],
[["GRATIT", "Demo: BDT to GIF Chart"]],
[["LABELX", "Weeks"]],
[["DTEINI", iniTxt]], [["DTEEND", endTxt]],
[["LABELY", serNam]],
[["FILDAT", filDat]],
[["SERNAM", serNam]] ]], 1);
Text WriteFile(filGpl, cmdRep); // Write the Gnuplot commands file
cmdRep // Returns de commands text
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Escribe el fichero de mandatos para Gnuplot sustituyendo en la semilla de
fichero de mandatos las etiquetas por los valores precisos.",
cmdGlp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real runGpl =
{
Text cmdExe = "..\\..\\Bin\\gnuplot\\bin\\pgnuplot";
Text cmdTxt = cmdExe+" "+filGpl;
System(cmdTxt) // Execute gnuplot
};
//////////////////////////////////////////////////////////////////////////////
PutDescription("Ejecuta Gnuplot con su fichero de mandatos.",runGpl);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text wriHtm =
{
Text codHtm = ReplaceTable(ReadFile(filSed),
[[ [["SIZWID", "800"]], [["SEDHEI", "500"]],
[["FILGIF", filGif]],
[["PLOCOD", cmdGlp]] ]], 1); // Inserts Gnuplot commands
Text WriteFile(filHtm, codHtm) // Makes a Html page from a seed
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Escribe el fichero de la pagina Html sustituyendo en la semilla Html
las etiquetas por los valores precisos.",
wriHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real runPdf =
{
Text pdfExe = "\""+
"C:\\Program Files\\HTML2PDF Pilot\\HTML2PDF_Pilot.exe"+
"\"";
Text absPth = Replace(Ois.AutoPath("."), "/", "\\"); // Absolute path
Text pdfInp = absPth+"\\"+filHtm; // Html input file
Text pdfOut = absPth+"\\"+filPdf; // Pdf output file
Text pdfCmd = pdfExe+" "+ // Executable pdf convertor
pdfInp+" "+ // Input file
pdfOut+" "+ // Output file
" /margin-left 10"+
" /margin-right 10"+
" /psize A4"+
" /jpeg 100";
// Makes a Pdf file from the Html page
System(pdfCmd) // Execute html to pdf conversion
};
//////////////////////////////////////////////////////////////////////////////
PutDescription("Conversor de Html a Pdf.",runPdf);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// END
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nGnuplot.Test make: end");
2015 asolver.com | Aviso legal | XHTML | Δ Θ Ξ | Creative Commons | Mapa y funciones del sitio