Otros encuestados asumen que se trata de una imagen rasterizada de un gráfico. Pero hoy en día la buena práctica es publicar los gráficos en forma vectorial. En este caso se puede lograr una mayor exactitud de los datos recuperados e incluso estimar el error de recuperación si se trabaja con el código del gráfico vectorial directamente, sin convertirlo en una imagen rasterizada.
Dado que los documentos se publican en línea como archivos PDF, asumo que tiene un archivo PDF que contiene un gráfico de vectores con los datos que desea recuperar de él (obtener en forma numérica) y estimar el error de recuperación introducido.
En primer lugar, el PDF es un formato vectorial que es básicamente textual (puede ser leído por un editor de texto). El problema es que puede (y casi siempre) contener flujos de datos comprimidos que requieren ser descomprimidos para poder ser leídos por un editor de texto. Estos flujos de datos comprimidos suelen contener la información que necesitamos.
Hay varias maneras de descomprimir los flujos de datos para convertir un archivo PDF en un documento de texto con código PDF legible. Probablemente la forma más simple es usar el código libre Utilidad QPDF con --stream-data=uncompress
opción :
qpdf infile.pdf --stream-data=uncompress -- outfile.pdf
Se describen algunas otras formas aquí y aquí .
El outfile.pdf generado puede ser abierto por un editor de texto. Ahora necesitas Manual de referencia en PDF para entender lo que ves. ¡No te asustes en este momento! Sólo necesita conocer algunos operadores descritos en la sección "8.6.1 Operadores de segmento de ruta" en las páginas 224 - 228. Los operadores más importantes son (la primera columna contiene la especificación de las coordenadas de un operador, la segunda contiene el operador y la tercera es el nombre del operador):
x y m moveto
x y l lineto
x y width height re rectangle
h closepath
En la mayoría de los casos basta con conocer a estos cuatro operadores para recuperar los datos.
Ahora necesitas importar el archivo outfile.pdf como texto en algún programa donde puedas manipular los datos. Te mostraré cómo hacerlo con Mathematica .
Importando el archivo:
pdfCode = Import["outfile.pdf", "Text"];
Ahora asumo el caso más simple: el gráfico contiene una línea que consiste en muchos segmentos de dos puntos. En este caso cada segmento de la línea está codificado así:
268.79999 408.92975 m
272.39999 408.92975 l
Extrayendo todos esos segmentos del código PDF:
lines = StringCases[pdfCode,
StartOfLine ~~ x1 : NumberString ~~ " " ~~ y1 : NumberString ~~ " m\n" ~~
x2 : NumberString ~~ " " ~~ y2 : NumberString ~~ " l\n"
:> ToExpression@{{x1, y1}, {x2, y2}}];
Visualizándolos:
Graphics[{Line[lines]}]
Obtienes algo como esto (el papel con el que estoy trabajando contiene cuatro gráficos):
Cada dos segmentos adyacentes comparten un punto. Así que en este caso puedes convertir las secuencias de los segmentos adyacentes en caminos:
paths = Split[lines, #1[[2]] == #2[[1]] &];
Ahora puedes visualizar todos los caminos por separado:
Graphics[{Line /@ paths}]
De esta figura puedes seleccionar (haciendo doble clic) el camino que buscas, copiar la selección de gráficos y pegar como nuevo Graphics
. Para convertirlo al revés en una lista de puntos se toma el elemento {1, 1, 1}
. Ahora tenemos los puntos no en el sistema de coordenadas del gráfico sino en el sistema de coordenadas del archivo PDF. Necesitamos establecer una relación entre ellos.
De la trama anterior se seleccionan las garrapatas a mano (manteniendo Shift
para la selección múltiple), luego copiarlas y pegarlas como nuevas Graphics
. Así es como se pueden extraer las coordenadas de las garrapatas horizontales:
Ahora comprueba las diferencias entre las garrapatas:
Differences[reHorTicks]
A partir de estas diferencias se puede ver lo preciso que es el posicionamiento de las garrapatas en el archivo PDF. Da una estimación del error introducido al convertir los puntos de datos originales en un gráfico vectorial incluido en el archivo PDF. Si hay errores apreciables en el posicionamiento de las garrapatas se puede reducir el error ajustando las coordenadas de las garrapatas a un modelo lineal. Esta función lineal puede utilizarse ahora para obtener las coordenadas originales de los puntos del recorrido (es decir, en el sistema de coordenadas del gráfico).