Search code examples
encodingplotgnuplotiso-8859-1

Gnuplot reading not locale encoding file


I want to plot data of an ISO_8859_1 encoded file (two columns of numbers). Those are the first 10 data points of the file:

#Pe2
        1   0.8000
        2   0.8000
        3   0.8000
        4   0.8000
        5   0.8000
        6   0.8000
        7   0.8000
        8   0.8000
        9   0.8000
       10   0.8000

The original file has 15000 data points. I create this data with MATLAB, specifically setting ISO_8859_1 encoding, so I am sure that that's the encoding. This is a snippet of the matlab code:

 slCharacterEncoding('ISO-8859-1');             %Instruction before writing anything to the file.

 fprintf(fileID,'  %7d  %7.4f',Tempo(i),y(i));  %For loop in this instruction

 fprintf(fileID,'\r');                          %Closing the file
 fclose(fileID);

This is the script that I run. This file is encoded with the default Windows txt files encoding:

set encoding iso_8859_1
set terminal wxt size 1000,551 
# Line width of the axes
set border linewidth 1.5
# Line styles
set style line 1 lc rgb '#dd181f' lt 1 lw 1 pt 0   # red
# Axes label
set xlabel 'tiempo'
set ylabel 'valor'
plot 'Pe2.txt' with lines ls 1

This is the output of the gnuplot console when I run the script. After that I input "show encoding":

        G N U P L O T
        Version 4.6 patchlevel 5    last modified February 2014
        Build System: MS-Windows 32 bit 

        Copyright (C) 1986-1993, 1998, 2004, 2007-2014
        Thomas Williams, Colin Kelley and many others

        gnuplot home:     http://www.gnuplot.info
        faq, bugs, etc:   type "help FAQ"
        immediate help:   type "help"  (plot window: hit 'h')

Terminal type set to 'wxt'
gnuplot> cd 'C:\Example'
gnuplot> load 'script.txt'
         "script.txt", line 10: warning: Skipping data file with no valid points

gnuplot> plot 'Pe2.txt' with lines ls 1
                                       ^
         "script.txt", line 10: x range is invalid

gnuplot> show encoding

        nominal character encoding is iso_8859_1
        however LC_CTYPE in current locale is Spanish_Spain.1252

gnuplot> 

If I open the file, make some change undo the change and save the file, gnuplot plots the file. I guess that it's because it saves it with local encoding which is the one gnuplot uses to read files.

How do I plot files with gnuplot which are not with the local encoding format?

I also have what it seems to be a similar problem when I output a file with VS2010Css. If I don't specifically set the culture with:

Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");

I am not able to save a file wich gnuplot is able to plot. I believe that this last problem is because of the "," and the "."

In Css I save the files with this:

StreamWriter Writer = new StreamWriter(dir + @"\" + + (k+1) + "_" + nombre  + extension);

                Writer.WriteLine("#" + (k+1) + "_" + nombre);
                Writer.WriteLine();
                Writer.WriteLine("{0,32} {1,32}", "#tiempo", "#valor");

                for (int i = 0; i < tiempo.GetLength(0); i++)
                {
                    Writer.WriteLine("{0,32} {1,32}", tiempo[i].ToString(), valor[i, k]);
                }

Thank you.


Solution

  • Your file has only carriage returns (\r 0xd) as line breaks which doesn't work with gnuplot. You must use only line feed (\n 0xa), but \r\n does also work.