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=uncompress
opzione :
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):
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 Shift
per la selezione multipla), quindi copiarli e incollarli come nuovi Graphics
. Ecco come è possibile estrarre le coordinate delle zecche orizzontali:
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).