Posible duplicado:
Cómo seleccionar un número finito de muestras del archivo al trazar usando pgfplot
Compilar mi documento con muchos gráficos PGF, cada uno de los cuales contiene miles de puntos de datos de un archivo CSV, lleva demasiado tiempo (minutos). Me doy cuenta de que no tiene sentido tener tantos puntos de datos: si hubiera, digamos, una décima parte, sería suficiente para recrear la misma trama en papel.
Uno de mis archivos, por ejemplo, consta de 216.000 líneas de este formato:
0.000000000000000000e+00 0.000000000000000000e+00 1.388888888888888888e-04 -2.182787284255027771e-11
por supuesto, eso es demasiado. Luego leí el archivo como:
\documentclass{scrartcl}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5.1}
\begin{document}
\begin{tikzpicture}
\begin{loglogaxis}[
\addplot[mark=*, color=red] file {Data/plotXYZ.dat};
\end{loglogaxis}
\end{tikzpicture}
\end{document}
¿Es posible que el paquete tome solo cada x-ésima línea para acelerar el proceso de compilación? ¿O hay otras formas de hacerlo (significativamente) más rápido?
Estoy ejecutando Ubuntu y un amigo mío me recomendó que escribiera un awk
script que revisara un .csv
archivo y retuviera solo cada x-ésima línea. Sin embargo, no tengo idea de cómo haría eso, ya que nunca awk
antes lo había usado. Si esta fuera la opción preferida, ¿alguien podría ayudarme a configurar dicho script?
Respuesta1
pgfplots ofrece el filtro each nth point=100
.
Dado que el filtrado de coordenadas tiene diferentes casos de uso, es posible que desee configurar
each nth point=100, filter discard warning=false, unbounded coords=discard
Esta combinación no generará advertencias por cada punto descartado. Además, eliminará silenciosamente los 99 puntos, como si no los hubiera escrito en absoluto en el flujo de entrada. Tenga en cuenta que la opción alternativa unbounded coords=jump
interrumpiría explícitamente su trama (que no es lo que quiere aquí).
Se ha informado que este enfoque funciona bastante bien: de hecho, el tiempo no fue mucho mayor como si se hubiera utilizado alguna herramienta externa para filtrar el archivo de datos (algún usuario avanzado informó recientemente por correo).
Respuesta2
Aunque el pgfplots
filtro each nth point
podría ser una solución hasta cierto punto, ciertamente no es una solución que pueda usarse en general. Por ejemplo, elegir each nth point=100
podría distorsionar algunas áreas de la trama que realmente necesitan puntos extra para ilustrarse correctamente. Por otro lado, establecer each nth point
un número más bajo podría no ser "económico" en términos del número de puntos utilizados.
En breve,se necesita un método de reducción de resolución más inteligente. Ese método debería poder ajustar dinámicamente la cantidad de puntos mantenidos, dependiendo de la complejidad de la trama en cada área, de modo que tengamos el mejor resultado visual usando solo la cantidad mínima requerida de puntos (algo así como el látex puede ajustar automáticamente each nth point=?
varias veces durante el "paso" de un diagrama).
Echa un vistazo aesta respuesta.
En caso de que tenga matlab u octave, puede usar la versión modificada que matlab2tikz
se proporciona allí, que implementa un algoritmo de reducción de resolución eficiente.
Por otro lado, si no usa matlab ni octava, aún puede traducir ese algoritmo de reducción de resolución (está en la función pointReduction) al idioma que desee y usarlo para reducir la resolución de sus figuras y luego exportarlas a CSV.