
soy nuevo enpgfplotstable
, estoy tratando de leerparcela gnuplottabla exportada en pgfplotstable
.
guión gnuplot:
set samples 91
set table "file.dat"
set angles degrees
plot [0:90] sin(x),cos(x),tan(x);
unset table
La tabla de gnuplot file.dat
se proporciona a continuación (se dan 5 puntos para ser concisos):
# Curve 0 of 3, 91 points
# Curve title: "sin(x)"
# x y type
0 0 i
1 0.0174524 i
2 0.0348995 i
3 0.052336 i
4 0.0697565 i
5 0.0871557 i
# Curve 1 of 3, 91 points
# Curve title: "cos(x)"
# x y type
0 1 i
1 0.999848 i
2 0.999391 i
3 0.99863 i
4 0.997564 i
5 0.996195 i
# Curve 2 of 3, 91 points
# Curve title: "tan(x)"
# x y type
0 0 i
1 0.0174551 i
2 0.0349208 i
3 0.0524078 i
4 0.0699268 i
5 0.0874887 i
Nota: Es posible leer el encabezado y el formato de la tabla (todos los datos organizados en columnas) que se indican a continuación en comparación con el caso anterior (todos los datos organizados secuencialmente).
# A B C
1 2 3
4 5 7
8 9 10
Pregunta
¿Es posible leer un archivo ASCII con formato personalizado pgfplotstable
o \pgfplotstableset{}
cualquier otra solución alternativa en gnuplot para que se lea bien y se escriba pgfplotstable
?
Respuesta1
Inicialmente pensé que querías trazar los datos, pero al leer tu pregunta nuevamente parece que solo quieres configurarlos como una tabla. pgfplotstable
Puedes hacer algo como esto, aunque no estoy seguro pgfplotstable
de que realmente ayude en este caso, cuando llegue el momento. Si has reorganizado los datos que \pgfplotstabletypeset
vas a leer, simplemente puedes escribirlos como longtable
, sin embargo...
[actualización para la primera columna no entera]
\documentclass{article}
\usepackage{pgfplotstable,longtable,array}
\begin{document}
\makeatletter
\def\loopb#1\repeatb{\def\iterateb{#1\relax\expandafter\iterateb\fi}%
\iterateb \let\iterateb\relax}
\let\repeatb\fi
\begingroup
\count@\z@
\catcode`\#12
\catcode`\*=6
\def\tstrelax{\relax}
\def\tsti{i}
\def\ca*1# Curve*2 of *3,*4 points*5!!{%
\def\cnum{*2}\def\ctot{*3}\def\cpoints{*4}}
\def\cb*1# Curve title: "*2"*3!!{%
\def\title{*2}}
\def\cc*1 *2 *3 *4!!{%
\def\x{*1}\def\y{*2}\def\ci{*3}}
\newread\myin
\openin\myin=file.dat
\@tempcnta\z@
\loop
\ifeof\myin\else
\read\myin to \tmp
\expandafter\ifx\expandafter\par\tmp
\else
\expandafter\cb\tmp# Curve title: "\relax"!!%
\ifx\title\tstrelax
\expandafter\ca\tmp# Curve of \relax, points!!%
\ifx\ctot\tstrelax
\expandafter\cc\tmp. . . !!%
\ifx\ci\tsti
\expandafter\edef\csname my-\the\@tempcnta-\the\@tempcntb\endcsname{\ifnum\@tempcnta=1 \x\space\fi\y}
\advance\@tempcntb\@ne
\fi
\else
\let\total\ctot
\let\points\cpoints
\advance\@tempcnta\@ne
\@tempcntb\z@
\fi
\else
\expandafter\let\csname my-\the\@tempcnta-title\endcsname\title
\fi
\fi
\repeat
{\let\\\relax
\gdef\mytable{}
\gdef\row{x}
\@tempcnta\z@
\loop
\advance\@tempcnta\@ne
\xdef\row{\row\space \csname my-\the\@tempcnta-title\endcsname}
\ifnum\@tempcnta<\total
\repeat
\xdef\mytable{\row\space\\\space}
\@tempcntb\z@
\loopb
\xdef\row{}
\@tempcnta\z@
\loop
\advance\@tempcnta\@ne
\xdef\row{\row\space \csname my-\the\@tempcnta-\the\@tempcntb\endcsname}
\ifnum\@tempcnta<\total
\repeat
\xdef\mytable{\mytable\row\space\\\space}
\advance\@tempcntb\@ne
\ifnum\@tempcntb<\points
\repeatb
\show\mytable
\xdef\tmp{\noexpand\pgfplotstabletypeset[row sep=\noexpand\\, begin table=\noexpand\begin{longtable},
end table=\noexpand\end{longtable}
sci,precision=5]{\mytable}}
}
\endgroup
\tmp
\end{document}
Respuesta2
Aunque no es una excelente respuesta TeX de bajo nivel como la anterior, sorprendentemente se pasó por alto anteriormente y hoy se descubrió que usar las opciones de pgfplotstableignore chars={\i}
leer gnuplot
la tabla completa file.dat
en dos columnas yselect equal part entry of
para reorganizar dos columnas en filas iguales de 3 columnas. Pero no se pudieron encontrar las opciones de pgfplotstable para leer varios encabezados ("sin(x)", "cos(x)" y "tan(x)") automáticamente.
\documentclass[12pt]{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}
\usepackage{booktabs}
\usepackage{colortbl}
\usepackage{longtable}
\pgfplotstableset{begin table=\begin{longtable},end table=\end{longtable},%
every head row/.style={before row=\toprule,after row=\midrule},%
every last row/.style={after row=\bottomrule},%
every even row/.style={before row={\rowcolor[gray]{.8}}}%
}
\begin{document}
\pgfplotstabletypeset[columns={0,1,1,1},%
display columns/0/.style={select equal part entry of={0}{3},column name=$x$},%
display columns/1/.style={select equal part entry of={0}{3},column name=$sin(x)$},%
display columns/2/.style={select equal part entry of={1}{3},column name=$cos(x)$},%
display columns/3/.style={select equal part entry of={2}{3},column name=$tan(x)$},%
precision=5,ignore chars={\i}]{file.dat}
\end{document}