62 votos

El software necesario para raspar los datos de la gráfica

¿Alguien tiene alguna experiencia con software (preferiblemente gratuito, preferiblemente de código abierto) que tome una imagen de los datos trazados en coordenadas cartesianas (un gráfico estándar, de todos los días) y extraiga las coordenadas de los puntos trazados en el gráfico?

Esencialmente, se trata de un problema de minería de datos y un reverso problema de visualización de datos.

45voto

Hertanto Lie Puntos 965

software de digitalización de gráficos

Hay muchas opciones diferentes, pero todas utilizan básicamente el mismo flujo de trabajo:

  1. subir una imagen
  2. establecer las escalas x e y indicando los valores en dos puntos de cada eje
  3. indican si la escala es lineal, logarítmica, etc,
  4. haga clic en los puntos.
    • Algunos de los programas reconocen automáticamente líneas o puntos. Normalmente busco puntos, y los encuentro demasiado inconsistentes para ser útiles incluso con 100s de puntos. No he encontrado ninguno que reconozca diferentes símbolos. Esta característica podría valer la pena para digitalizar líneas, pero nunca he tenido que hacerlo.

El programa devuelve cada punto como una matriz x-y.

A menudo ayuda a seleccionar los puntos si la imagen se amplía, ya sea cargando una versión ampliada de la imagen o usando la función de zoom disponible en algunos de los programas.

Hay muchos programas, y varían en cuanto a características extras, usabilidad, licencias y costo. Los he enumerado a continuación.

Todos los que he usado funcionan bien. Excepto en contextos donde el error de medición es muy pequeño, el error de raspado de gráficos es insignificante (por ejemplo, error de digitalización << tamaño de las barras de error o incertidumbre en la estimación). No he probado la exactitud de ninguno de estos programas, pero sería interesante comparar entre los usuarios, entre los programas y contra los resultados de los análisis estadísticos reproducidos.

Programas que he usado:

  • Digitalizador (shareware) reconocimiento automático de punto/línea. Disponible en el repositorio Ubuntu (engauge-digitizer)
  • Obtener datos (shareware) tiene ventana de zoom, reconocimiento automático de punto/línea
  • Digitalizarlo (shareware) reconocimiento automático de punto / línea
  • ImageJ (código abierto, más extensible después de la digitalización R)
  • R digitalizar (gratuito, de código abierto), porque simplifica el proceso de obtener datos del gráfico en un análisis manteniendo todos los pasos en R. Véase la tutorial en R-Journal
  • ¡Agárralo! (demostración gratuita, $69) Excel plug-in
  • WebPlotDigitzer (gratis, en línea). Basado en el navegador, extrae datos de las imágenes. Revisado aquí .

Programas que no he usado:

  • GraphClick (Mac, $8)
  • g3data (código abierto - GNU GPL) Tiene ventana de zoom, sin reconocimiento automático. Disponible en el repositorio de Ubuntu.
  • GRABITO Un plugin de código abierto (BSD) que se ejecuta en una plataforma propietaria, Matlab

TL;DR: WebPlotDigitizer está disponible como aplicación web así como un plugin de cromo

40voto

Boris Tsirelson Puntos 191

Echa un vistazo a la digitalizar paquete para R . Está diseñado para resolver exactamente este tipo de problemas.

/Ya no está en el CRAN, pero todavía puedes lo consiguen de R-Forge .

17voto

Alexey Popkov Puntos 193

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):

plot

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:

screenshot

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).

4voto

Eric Davis Puntos 1542

No lo he usado, pero Laboratorio de CogSci de la UWA recomiendan DataThief (shareware).

4voto

frglps Puntos 521

Mira el engaño. Su código libre y abierto http://digitizer.sourceforge.net/

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X