
Estoy intentando trazar un archivo .csv muy grande con varias columnas usando pgfplots. Quiero usar la primera columna para todos mis gráficos. Mi rutina habitual es hacer algo como:
\addplot [solid] table [x=A,y=B]{mydata.cvs};
\addplot [solid] table [x=A,y=C]{mydata.cvs};
\addplot [solid] table [x=A,y=nth]{mydata.cvs};
Esto funciona bien en combinación con LuaLatex (memoria dinámica) y no lleva mucho tiempo generar la trama. Sin embargo, decidí mejorar mi codificación (creo que también podría aumentar la velocidad de compilación) simplemente leyendo la tabla una vez al principio usando:
\pgfplotstableread[col sep=semicolon]{mydata.csv}\mytableone
y luego:
\addplot [solid] table [x=A,y=B]{\mytableone};
\addplot [solid] table [x=A,y=C]{\mytableone};
\addplot [solid] table [x=A,y=nth]{\mytableone};
Después de hacer esto, el proceso lleva MUCHO más tiempo y, a veces, ni siquiera se compila y falla. ¿Alguien puede explicarme por qué hay una gran diferencia en la velocidad de compilación y qué podría estar causando el bloqueo?
Lo siento, pero no tengo un buen ejemplo y no puedo compartir mis datos (de todos modos, es muy grande).
Gracias =)
PD También quiero seleccionar un rango en la columna, para eso uso esta soluciónseleccionar filas tabla pgfplots. No estoy seguro si esto también puede causar problemas.
Respuesta1
Su observación es correcta: releer el mismo archivo varias veces escala considerablemente mejor que reutilizar un "identificador de archivo".
La razón de este comportamiento inesperado está relacionada con cómo funciona la programación en TeX (o, en este caso, no funciona): simplemente no existe un tipo de datos de matriz (eficiente). La única forma de implementar tipos de datos de matriz es utilizar el espacio macro global "normal", y eso da como resultado un consumo de memoria mucho mayor y alcanza fácilmente los límites estrictos de TeX.
Lua tendría tipos de datos de matriz eficientes, pero el núcleo de pgfplots para tablas aún no tiene una representación de Lua dedicada.
Algunos detalles más sobre la diferencia entre volver a leer archivos y leerlos una vez están documentados en el manual para la clave "leer completamente" (ciertamente no es el mejor lugar).