¿Compilar un documento con PGFplots procesando solo cada x-ésimo punto de datos?

¿Compilar un documento con PGFplots procesando solo cada x-ésimo punto de datos?

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 awkscript que revisara un .csvarchivo y retuviera solo cada x-ésima línea. Sin embargo, no tengo idea de cómo haría eso, ya que nunca awkantes 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=jumpinterrumpirí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 pgfplotsfiltro each nth pointpodrí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=100podría distorsionar algunas áreas de la trama que realmente necesitan puntos extra para ilustrarse correctamente. Por otro lado, establecer each nth pointun 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 matlab2tikzse 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.

información relacionada