¿Alguien tiene alguna experiencia con software (preferiblemente gratuito, preferiblemente de código abierto) que tomará una imagen de datos trazados en coordenadas cartesianas (un diagrama estándar, cotidiano) y extraerá las coordenadas de los puntos trazados en el gráfico?
Esencialmente, este es un problema de minería de datos y un problema de visualización inversa de datos.
data-visualization
data-mining
software
Alex Holcombe
fuente
fuente
Respuestas:
Echa un vistazo a la digitize paquete para R . Está diseñado para resolver exactamente este tipo de problema.
fuente
software de digitalización de gráficos
Hay muchas opciones diferentes, pero todas utilizan básicamente el mismo flujo de trabajo:
El programa devuelve cada punto como una matriz xy.
A menudo ayuda a seleccionar puntos si la imagen se amplía, ya sea cargando una versión ampliada de la imagen o utilizando la función de zoom disponible en algunos de los programas.
Hay muchos programas y varían en características adicionales, usabilidad, licencias y costos. 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 del raspado del gráfico es insignificante (por ejemplo, error de digitalización << tamaño de las barras de error o incertidumbre en la estimación). Si no ha probado la precisión de ninguno de estos programas, sería interesante comparar entre usuarios, entre programas y con los resultados de análisis estadísticos reproducidos.
Programas que he usado:
Programas que no he usado:
TL; DR: WebPlotDigitizer está disponible como una aplicación web , así como un complemento de Chrome
fuente
Otros respondedores suponen que se trata con la imagen ráster de un gráfico. Pero hoy en día la buena práctica es publicar gráficos en forma vectorial. En este caso, puede lograr una precisión mucho mayor de los datos recuperados e incluso estimar el error de recuperación si trabaja directamente con el código del gráfico vectorial, sin convertirlo en una imagen ráster.
Dado que los documentos se publican en línea como archivos PDF, supongo que tiene un archivo PDF que contiene un diagrama vectorial con los datos que desea recuperar (obtener en forma numérica) y estimar el error de recuperación introducido.
Primero que nada, 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 deben descomprimirse para poder leerlos un editor de texto. Estos flujos de datos comprimidos generalmente contienen la información que necesitamos.
Hay varias formas de descomprimir flujos de datos para convertir un archivo PDF en un documento de texto con un código PDF legible. Probablemente la forma más simple es usar la utilidad QPDF gratuita con la
--stream-data=uncompress
opción :Algunas otras formas se describen aquí y aquí .
Un archivo de texto puede abrir el archivo outfile.pdf generado. Ahora necesita el Manual de referencia en PDF 1.7 para comprender lo que ve. ¡No se asuste en este momento! Solo necesita conocer algunos operadores descritos en la "TABLA 4.9 Operadores de construcción de caminos" en las páginas 226 - 227. Los operadores más importantes son (la primera columna contiene la especificación de coordenadas para un operador, la segunda contiene el operador y la tercera es el nombre del operador ):
En la mayoría de los casos, es suficiente conocer estos cuatro operadores para recuperar los datos.
Ahora necesita importar el archivo outfile.pdf como texto en algún programa donde pueda manipular los datos. Te mostraré cómo hacerlo con Mathematica .
Importando el archivo:
Ahora supongo el caso más simple: el gráfico contiene una línea que consta de muchos segmentos de dos puntos. En este caso, cada segmento de la línea se codifica así:
Extraer todos estos segmentos del código PDF:
Visualizándolos:
Obtiene algo como esto (el documento con el que estoy trabajando contiene cuatro gráficos):
Cada dos segmentos adyacentes comparten un punto. Entonces, en este caso, puede convertir las secuencias de segmentos adyacentes en rutas:
Ahora puede visualizar todas las rutas por separado:
A partir de esta figura, puede seleccionar (haciendo doble clic) la ruta que está buscando, copiar la selección de gráficos y pegarla como nueva
Graphics
. Para convertirlo hacia atrás a la lista de puntos, 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 gráfica anterior, selecciona los ticks a mano (manteniéndolos presionados
Shift
para una selección múltiple), luego cópielos y péguelos como nuevosGraphics
. Así es como puede extraer coordenadas de tics horizontales:Ahora verifique las diferencias entre las garrapatas:
A partir de estas diferencias, puede ver cuán preciso es el posicionamiento de las marcas en el archivo PDF. Ofrece 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 marcas, puede reducir el error ajustando las coordenadas de las marcas a un modelo lineal. Esta función lineal ahora se puede utilizar para obtener coordenadas originales de puntos de la ruta (que está en el sistema de coordenadas de la trama).
fuente
No lo he usado, pero el laboratorio UWA CogSci recomienda DataThief (shareware).
fuente
Echa un vistazo a engauge. Es gratis y de código abierto http://digitizer.sourceforge.net/
fuente
Un-Scan-It http://www.silkscientific.com/graph-digitizer.htm
fuente
Pruebe scanit: http://amsterchem.com/scanit.html
Es gratuito, se ejecuta en Windows
fuente
También puede probar im2graph ( http://www.im2graph.co.il ) para convertir gráficos en datos. Funciona en Linux y Windows.
fuente
'g3data' es un software que puede usarse para cumplir con su propósito. Es un software gratuito y lo he usado. Puede descargarlo desde aquí: http://www.frantz.fi/software/g3data.php
fuente
Tuve que hacer esto tantas veces en mi carrera que eventualmente armé un programa de JavaScript que está disponible aquí:
http://kdusling.github.io/projects/DataGrab/index.html
Lo sentimos, pero aún tendrá que hacer clic en cada punto. Aunque puede usar las teclas de flecha que ahorran algo de esfuerzo en la muñeca.
fuente
STIPlotDigitizer ha sido lanzado recientemente.
http://stiwww.com/product/software-techniques-plot-digitizer
fuente
Para los
R
usuarios, el paquetegrImport
(en CRAN ) puede importar gráficos vectoriales y convertirlos en objetos que R puede interpretar. Se supone que uno puede convertir PDF (u otro formato vectorial de interés) a formato PostScript. Esto se puede hacer, por ejemplo, con Inkscape : importe (File > Import
) su página PDF con su figura en Inkspace yFile > Save As > Save as type: > PostScript *.ps
. Una vez que tenga su*.ps
archivo en barbecho de lagrImport
viñeta Importación de gráficos vectoriales , más relevante será la sección '4.1. Raspado de datos de imágenes '.Necesitará ghostscript en su sistema operativo; intente descargarlo desde aquí .
Tenga en cuenta que si de alguna manera se encuentra con el error 'estado 127' de ghostscript cuando llama
grImport::PostScriptTrace
, entonces siga la recomendación desde aquí , que dice configurar manualmente la ruta a ghostscript en su máquina.Aquí hay un código R de muestra para importar un archivo PostScript a R:
Tenga en cuenta que si su gráfico está en una página en un archivo PDF de varias páginas, puede dividir el documento de varias páginas con
PDFTK builder
. Importe su archivo PDF de una página en Ikscape y elimine cualquier elemento adicional (texto adicional, elementos gráficos adicionales). Esto facilitará su trabajo en R cuando intente capturar las coordenadas de los elementos gráficos que le interesan.fuente