Software necessario per raschiare i dati dal grafico [chiuso]


56

Qualcuno ha qualche esperienza con il software (preferibilmente gratuito, preferibilmente open source) che acquisirà un'immagine dei dati tracciati su coordinate cartesiane (una trama standard quotidiana) ed estrarrà le coordinate dei punti tracciati sul grafico?

In sostanza, si tratta di un problema di data mining e di visualizzazione inversa dei dati.


2
Per una soluzione, vedere i commenti a questa risposta . Le soluzioni open source includerebbero l'elaborazione di immagini o il software GIS raster ( GRASS è probabilmente un candidato) o, forse, GNU Octave . Sto citando questi come un commento perché non ho usato neanche per questo scopo specifico, quindi per favore prendeteli come possibilità, non come soluzioni definite.
whuber

Spero in codice / software specifico per i grafici di scraping, e ricordo che esistevano tali pacchetti, almeno lo facevano 10 anni fa, ma non ricordo i loro nomi ora e non so se funzionano sui sistemi operativi attuali .
Alex Holcombe,

@Alex, prova a cercare su Google "Graph Digitizer Open Source"
David LeBauer,

Un breve programma Mathematica per ottenere dati dalle scansioni qui .
Sjoerd C. de Vries,

1
Vedi anche la risorsa che indico nella mia risposta a Qual è la relazione tra Y e X in questo diagramma? .
Alexis,

Risposte:



42

software di digitalizzazione grafica

Esistono molte opzioni diverse, ma sostanzialmente usano lo stesso flusso di lavoro:

  1. carica un'immagine
  2. imposta le scale xey indicando i valori in due punti su ciascun asse
  3. indica se la scala è lineare, log, ecc.
  4. clicca sui punti.
    • Alcuni programmi riconoscono automaticamente linee o punti. Di solito cerco punti e li trovo troppo incoerenti per essere utili anche con centinaia di punti. Non ne ho trovato uno che riconosca simboli diversi. Questa funzione potrebbe valere la pena di digitalizzare le linee, ma non ho mai dovuto farlo.

Il programma restituisce ogni punto come una matrice xy.

Spesso aiuta a selezionare i punti se l'immagine viene ingrandita, caricando una versione ingrandita dell'immagine o utilizzando la funzione di zoom disponibile in alcuni programmi.

Esistono molti programmi e variano per funzionalità, usabilità, licenze e costi aggiuntivi. Li ho elencati di seguito.

Tutti quelli che ho usato funzionano bene. Tranne nei contesti in cui l'errore di misurazione è molto piccolo, l'errore derivante dalla raschiatura dei grafici è insignificante (ad es. Errore dalla digitalizzazione << dimensione delle barre di errore o incertezza nella stima). Se non avessero testato l'accuratezza di nessuno di questi programmi, ma sarebbe interessante comparare gli utenti, i programmi e i risultati delle analisi statistiche riprodotte.

Programmi che ho usato:

  • Digitalizzatore (software libero, GPL) riconoscimento automatico punto / linea. Disponibile nel repository Ubuntu (engauge-digitizer)
  • Ottieni dati (shareware) ha una finestra di zoom, riconoscimento automatico di punti / linee
  • DigitizeIt (shareware) riconoscimento automatico punto / linea
  • ImageJ (open source, più estensibile dopo la digitalizzazione R)
  • R digitalizza (gratuito, open source), perché semplifica i processi di acquisizione dei dati dal grafico in un'analisi mantenendo tutti i passaggi di R. Vedi il tutorial in R-Journal
  • Prendilo! (demo gratuita, $ 69) plug-in Excel
  • WebPlotDigitzer (gratuito, online). Basato sul browser, estrae i dati dalle immagini. Recensione qui .

Programmi che non ho usato:

  • GraphClick (Mac, $ 8)
  • g3data (open source - GNU GPL) Ha una finestra di zoom, nessun riconoscimento automatico. Disponibile nel repository Ubuntu.
  • Plugin GRABIT OpenSource (BSD) che gira su una piattaforma proprietaria, Matlab

TL; DR: WebPlotDigitizer è disponibile come applicazione Web e come plug-in Chrome


g3data (open source - GNU GPL) ha una finestra di zoom, nessun riconoscimento automatico. Disponibile nel repository Ubuntu. Non posso confrontare, in quanto è l'unico che ho provato; ma l'ho trovato molto facile da usare.
Scortchi - Ripristina Monica

Perché la digitalizzazione R è stata rimossa dal CRAN?
Léo Léopold Hertz 준영

1
@Masi molti di questi non funzionano con pdf, con i file PDF ingrandisco la figura e quindi utilizzo una cattura dello schermo (ad esempio cmd-shift-4 su Mac) per salvare una figura come jpg o png.
David LeBauer

1
@Masi Mantenere un pacchetto su CRAN può richiedere molto lavoro aggiuntivo. Il pacchetto è disponibile su GitHub github.com/tpoisot/digitize
David LeBauer

1
@Masi cosa intendi con "sistematicamente"? Puoi collegarti alle figure in questione? Quando dici "interseca", vuoi dire che il punto è contenuto all'interno dell'asse e quindi non appare?
David LeBauer,

16

Altri risponditori ritengono che tu abbia a che fare con l'immagine raster di un grafico. Ma al giorno d'oggi la buona pratica è quella di pubblicare grafici in forma vettoriale. In questo caso è possibile ottenere una precisione molto più elevata dei dati recuperati e persino stimare l'errore di recupero se si lavora direttamente con il codice del grafico vettoriale, senza convertirlo in immagine raster.

Poiché i documenti sono pubblicati online come file PDF, presumo che tu abbia un file PDF che contiene un diagramma vettoriale con i dati che desideri recuperare da esso (ottenere in forma numerica) e stimare l'errore di recupero introdotto.

Prima di tutto, il PDF è un formato vettoriale che è sostanzialmente testuale (può essere letto da un editor di testo). Il problema è che può (e quasi sempre) contenere flussi di dati compressi che richiedono di non essere compressi per poterli leggere da un editor di testo. Questi flussi di dati compressi solitamente contengono le informazioni di cui abbiamo bisogno.

Esistono diversi modi per decomprimere i flussi di dati al fine di convertire i file PDF in un documento testuale con codice PDF leggibile. Probabilmente il modo più semplice è usare l' utilità QPDF gratuita con l' --stream-data=uncompressopzione :

qpdf infile.pdf --stream-data=uncompress -- outfile.pdf

Alcuni altri modi sono descritti qui e qui .

Il file outfile.pdf generato può essere aperto da un editor di testo. Ora hai bisogno di PDF Reference Manual 1.7 per capire cosa vedi. Non farti prendere dal panico in questo momento! È necessario conoscere solo pochi operatori descritti nella "TABELLA 4.9 Operatori di costruzione di percorsi" alle pagine 226 - 227. Gli operatori più importanti sono (la prima colonna contiene le specifiche delle coordinate per un operatore, la seconda contiene l'operatore e la terza è il nome dell'operatore ):

x y               m   moveto 

x y               l   lineto 

x y width height  re  rectangle

                  h   closepath

Nella maggior parte dei casi è sufficiente conoscere questi quattro operatori per il recupero dei dati.

Ora è necessario importare il file outfile.pdf come testo in alcuni programmi in cui è possibile manipolare i dati. Mostrerò come farlo con Mathematica .

Importare il file:

pdfCode = Import["outfile.pdf", "Text"];

Ora presumo il caso più semplice: il grafico contiene una linea che consiste di molti segmenti a due punti. In questo caso ogni segmento della linea è codificato in questo modo:

268.79999 408.92975 m
272.39999 408.92975 l

Estrarre tutti questi segmenti dal codice PDF:

lines = StringCases[pdfCode, 
   StartOfLine ~~ x1 : NumberString ~~ " " ~~ y1 : NumberString ~~ " m\n" ~~ 
                  x2 : NumberString ~~ " " ~~ y2 : NumberString ~~ " l\n" 
                                        :> ToExpression@{{x1, y1}, {x2, y2}}]; 

Visualizzandoli:

Graphics[{Line[lines]}]

Ottieni qualcosa del genere (il documento con cui sto lavorando contiene quattro grafici):

tracciare

Ogni due segmenti adiacenti condividono un punto. Quindi in questo caso puoi trasformare le sequenze di segmenti adiacenti in percorsi:

paths = Split[lines, #1[[2]] == #2[[1]] &];

Ora puoi visualizzare tutti i percorsi separatamente:

Graphics[{Line /@ paths}]

Da questa figura è possibile selezionare (facendo doppio clic) il percorso che si sta cercando, copiare la selezione grafica e incollarla come nuova Graphics. Per convertirlo all'indietro in un elenco di punti, prendi l'elemento {1, 1, 1}. Ora abbiamo i punti non nel sistema di coordinate del grafico ma nel sistema di coordinate del file PDF. Dobbiamo stabilire una relazione tra di loro.

Dal grafico sopra si selezionano i segni di spunta a mano (tenendo premuto Shiftper la selezione multipla), quindi copiarli e incollarli come nuovi Graphics. Ecco come è possibile estrarre le coordinate delle zecche orizzontali:

immagine dello schermo

Ora controlla le differenze tra le zecche:

Differences[reHorTicks]

Da queste differenze puoi vedere quanto sia preciso il posizionamento delle zecche nel file PDF. Fornisce una stima dell'errore introdotto convertendo i punti dati originali in un grafico vettoriale incluso nel file PDF. Se si verificano errori apprezzabili nel posizionamento delle zecche, è possibile ridurre l'errore adattando le coordinate delle zecche su un modello lineare. Questa funzione lineare ora può essere utilizzata per ottenere coordinate originali dei punti del tracciato (ovvero nel sistema di coordinate del diagramma).


2
Alexey, hai scritto Ma oggi la buona pratica è quella di pubblicare grafici in forma vettoriale. Hai un buon riferimento per le migliori pratiche intorno a quale formato (i) vettoriale (i)? (Dovrei usare un incapsulamento eps di un file svg nei miei manoscritti LaTeX, o dovrei trasmettere direttamente il grafico a LaTeX?) Saluti.
Alexis,

1
@Alexis Mi riferisco ai consigli del giornale moderno per fornire grafici in forma vettoriale. Riviste diverse accettano diversi sottogruppi di formati vettoriali. In generale, mi aspetto una migliore qualità quando ci sono minori trasformazioni da un formato all'altro.
Alexey Popkov,

@Alexis Quindi, in sostanza, mi aspetto che fornire i grafici in uno dei formati PostScript (EPS o PDF) sia l'opzione migliore. Ma la risposta esatta dipende dal software utilizzato dall'editore. Si noti inoltre che di solito le riviste raccomandano di non effettuare conversioni dei grafici prodotti dal software grafico. Quindi, se puoi esportare come EPS, è probabilmente l'opzione migliore. Se è possibile esportare SVG solo fornire SVG se il diario lo accetta, non convertirsi in un altro formato.
Alexey Popkov,

Risposta fortemente correlata con descrizione dettagliata della procedura per Mathematica .
Alexey Popkov,









1

Per gli Rutenti, il pacchetto grImport(su CRAN ) può importare grafica vettoriale e convertirli in oggetti che R può interpretare. Si presuppone che si possa convertire PDF (o altri formati vettoriali di interesse) in formato PostScript. Questo può essere fatto ad esempio con Inkscape : import ( File > Import) la tua pagina PDF con la tua figura in Inkspace e File > Save As > Save as type: > PostScript *.ps. Una volta che il *.psfile è incolto nella grImportvignetta Importazione di grafica vettoriale , più rilevante è la sezione '4.1. Scraping dati da immagini '.

Avrai bisogno di ghostscript sul tuo sistema operativo: prova a scaricarlo da qui .

Nota, se in qualche modo ti imbatti nell'errore 'status 127' di ghostscript quando chiami grImport::PostScriptTrace, allora metti da parte la raccomandazione da qui , che dice di impostare manualmente il percorso di ghostscript sul tuo computer.

Ecco un esempio del codice R per importare il file PostScript in R:

install.packages("grImport")
require(grImport)
# if you get the ghostscript error 'status 127' then set the path to ghostscript, e.g.:
Sys.setenv(R_GSCMD = normalizePath("C:/Program Files/gs/gs9.22/bin/gswin64c.exe")) 
PostScriptTrace(file = "graph.ps", outfilename = "graph.ps.xml")
my_fig <- readPicture(rgmlFile = "graph.ps.xml")
grid.picture(my_fig)

Nota, se il tuo grafico si trova su una pagina in un file PDF multipagina, puoi dividere il documento multipagina con PDFTK builder. Importa il tuo file PDF di una pagina in Ikscape ed elimina eventuali elementi extra (testo extra, elementi grafici extra). Questo faciliterà il tuo lavoro in R quando cerchi di catturare le coordinate degli elementi del grafico che ti interessano.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.