Software necessário para capturar dados do gráfico [fechado]

56

Alguém tem alguma experiência com software (de preferência gratuito, preferencialmente de código aberto) que obtém uma imagem dos dados plotados em coordenadas cartesianas (uma plotagem padrão do dia-a-dia) e extrai as coordenadas dos pontos plotados no gráfico?

Essencialmente, esse é um problema de mineração de dados e um problema de visualização reversa de dados.

Alex Holcombe
fonte
2
Para uma solução, consulte os comentários a esta resposta . As soluções de código aberto incluem processamento de imagem ou software GIS raster (o GRASS é um candidato provável) ou, talvez, o GNU Octave . Estou mencionando isso como um comentário, porque também não usei para esse fim específico; portanto, tome-as como possibilidades, não como soluções definidas.
whuber
Espero código / software específico para a raspagem de gráficos, e lembro que esses pacotes existiam, pelo menos há 10 anos, mas não consigo lembrar seus nomes agora e não sei se eles funcionam nos sistemas operacionais atuais .
21811 Alex Holcombe
@Alex, tente googling "Graph Digitizer Open Source"
David LeBauer
Um pequeno programa do Mathematica para obter dados de verificações aqui .
Sjoerd C. de Vries
11
Veja também o recurso que aponto na minha resposta para Qual é a relação entre Y e X neste gráfico? .
Alexis #

Respostas:

42

software de digitalização de gráficos

Existem muitas opções diferentes, mas todas usam basicamente o mesmo fluxo de trabalho:

  1. carregar uma imagem
  2. defina as escalas x e y indicando os valores em dois pontos em cada eixo
  3. indicar se a escala é linear, logarítmica etc.
  4. clique nos pontos.
    • Alguns dos programas reconhecem automaticamente linhas ou pontos. Normalmente, busco pontos e acho-os inconsistentes demais para serem úteis, mesmo com centenas de pontos. Não encontrei um que reconheça símbolos diferentes. Esse recurso pode valer a pena para a digitalização de linhas, mas nunca precisei fazer isso.

O programa retorna cada ponto como uma matriz xy.

Muitas vezes, ajuda a selecionar pontos se a imagem é ampliada, fazendo o upload de uma versão ampliada da imagem ou usando o recurso de zoom disponível em alguns programas.

Existem muitos programas e eles variam em recursos extras, usabilidade, licenciamento e custo. Eu os listei abaixo.

Todos os que eu usei funcionam bem. Exceto em contextos em que o erro de medição é muito pequeno, o erro de raspagem de gráfico é insignificante (por exemplo, erro de digitalização << tamanho das barras de erro ou incerteza na estimativa). Se não tivéssemos testado a precisão de nenhum desses programas, seria interessante comparar os usuários, os programas e os resultados das análises estatísticas reproduzidas.

Programas que usei:

  • Reconhecimento automático de ponto / linha do digitalizador (software livre, GPL). Disponível no repositório Ubuntu (engauge-digitizer)
  • Obter dados (shareware) possui janela de zoom, reconhecimento automático de ponto / linha
  • Reconhecimento automático de ponto / linha DigitizeIt (shareware)
  • ImageJ (código aberto, mais extensível após a digitalização de R)
  • R digitaliza (código-fonte aberto e gratuito), porque simplifica os processos de obtenção de dados do gráfico em uma análise, mantendo todas as etapas em R. Veja o tutorial no R-Journal
  • Pegue isso! (demo gratuita, US $ 69) Plug-in do Excel
  • WebPlotDigitzer (gratuito, online). Com base no navegador, extrai dados de imagens. Revisto aqui .

Programas que não usei:

  • GraphClick (Mac, US $ 8)
  • g3data (código aberto - GNU GPL) Possui janela de zoom, sem reconhecimento automático. Disponível no repositório Ubuntu.
  • Plug- in GRABIT OpenSource (BSD) executado em uma plataforma proprietária, Matlab

TL; DR: o WebPlotDigitizer está disponível como aplicativo da Web e como plugin do Chrome

David LeBauer
fonte
O g3data (código aberto - GNU GPL) possui uma janela de zoom, sem reconhecimento automático. Disponível no repositório Ubuntu. Não consigo comparar, pois é o único que tentei; mas achei muito fácil de usar.
Scortchi - Restabelece Monica
Por que digitalizar R foi removido do CRAN?
Léo Léopold Hertz,
11
@Masi, a maioria deles não funciona com pdf. Com arquivos pdf, amplio a figura e uso uma captura de tela (por exemplo, cmd-shift-4 no Mac) para salvar uma figura como jpg ou png.
David LeBauer
11
@Masi Manter um pacote no CRAN pode ser um trabalho adicional. O pacote está disponível no GitHub github.com/tpoisot/digitize
David LeBauer
11
@Masi, o que você quer dizer com "sistematicamente"? Você pode criar um link para a (s) figura (s) em questão? Quando você diz "interseção", você quer dizer que o ponto está contido no eixo e, portanto, não aparece?
David LeBauer
16

Outros respondentes assumem que você lida com a imagem rasterizada de um gráfico. Hoje em dia, porém, a boa prática é publicar gráficos em forma de vetor. Nesse caso, você pode obter uma exatidão muito maior dos dados recuperados e até estimar o erro de recuperação se trabalhar com o código do gráfico vetorial diretamente, sem convertê-lo em imagem rasterizada.

Como os artigos são publicados on-line como arquivos PDF, presumo que você tenha um arquivo PDF que contenha gráficos vetoriais com os dados que deseja recuperar (entre em forma numérica) e estime o erro de recuperação introduzido.

Antes de tudo, o PDF é um formato vetorial basicamente textual (pode ser lido por um editor de texto). O problema é que ele pode (e quase sempre) contém fluxos de dados compactados que precisam ser descompactados para serem lidos por um editor de texto. Esses fluxos de dados compactados geralmente contêm as informações de que precisamos.

Existem várias maneiras de descompactar fluxos de dados para converter arquivos PDF em um documento textual com código PDF legível. Provavelmente, a maneira mais simples é usar o utilitário QPDF gratuito com a --stream-data=uncompressopção :

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

Algumas outras maneiras são descritas aqui e aqui .

O outfile.pdf gerado pode ser aberto por um editor de texto. Agora você precisa do PDF Reference Manual 1.7 para entender o que vê. Não entre em pânico neste momento! Você precisa conhecer apenas alguns operadores descritos na "TABELA 4.9 Operadores de construção de caminhos" nas páginas 226 - 227. Os operadores mais importantes são (a primeira coluna contém especificações de coordenadas para um operador, a segunda contém o operador e a terceira é o nome do operador ):

x y               m   moveto 

x y               l   lineto 

x y width height  re  rectangle

                  h   closepath

Na maioria dos casos, é suficiente conhecer esses quatro operadores para recuperar os dados.

Agora você precisa importar o arquivo outfile.pdf como texto para algum programa em que possa manipular os dados. Vou mostrar como fazer isso com o Mathematica .

Importando o arquivo:

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

Agora, assumo o caso mais simples: o gráfico contém uma linha que consiste em muitos segmentos de dois pontos. Nesse caso, cada segmento da linha é codificado da seguinte maneira:

268.79999 408.92975 m
272.39999 408.92975 l

Extraindo todos esses segmentos do código PDF:

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

Visualizando-os:

Graphics[{Line[lines]}]

Você obtém algo assim (o trabalho com o qual estou trabalhando contém quatro gráficos):

enredo

Cada dois segmentos adjacentes compartilham um ponto. Portanto, neste caso, você pode transformar as seqüências de segmentos adjacentes em caminhos:

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

Agora você pode visualizar todos os caminhos separadamente:

Graphics[{Line /@ paths}]

Nesta figura, você pode selecionar (clicando duas vezes) o caminho que procura, copiar a seleção de gráficos e colar como novo Graphics. Para convertê-lo para trás na lista de pontos, você pega o elemento {1, 1, 1}. Agora, temos os pontos não no sistema de coordenadas do gráfico, mas no sistema de coordenadas do arquivo PDF. Precisamos estabelecer um relacionamento entre eles.

No gráfico acima, você seleciona os carrapatos manualmente (segurando Shiftpara seleção múltipla), depois os copia e cola como novo Graphics. Aqui está como você pode extrair coordenadas de marcações horizontais:

captura de tela

Agora verifique as diferenças entre os ticks:

Differences[reHorTicks]

A partir dessas diferenças, você pode ver o quão preciso é o posicionamento dos ticks no arquivo PDF. Ele fornece uma estimativa do erro introduzido pela conversão de pontos de dados originais em gráficos vetoriais incluídos no arquivo PDF. Se houver erros consideráveis ​​no posicionamento de ticks, você poderá reduzir o erro ajustando as coordenadas dos ticks a um modelo linear. Agora, essa função linear pode ser usada para obter coordenadas originais dos pontos do caminho (que estão no sistema de coordenadas do gráfico).

Alexey Popkov
fonte
2
Alexey, você escreveu. Mas hoje em dia a boa prática é publicar gráficos em forma de vetor. Você tem uma boa referência para as melhores práticas em torno de que o formato do vetor (s)? (Devo usar um encapsulamento eps de um arquivo svg em meus manuscritos do LaTeX, ou devo enviar um gráfico para o LaTeX diretamente?) Felicidades.
Alexis #
11
@ Alexis Refiro-me às recomendações da revista moderna para fornecer gráficos em forma de vetor. Revistas diferentes aceitam subconjuntos diferentes de formatos vetoriais. Em geral, espero uma melhor qualidade quando houver transformações menores de um formato para outro.
Alexey Popkov
@ Alexis Então, basicamente, espero que fornecer gráficos em um dos formatos PostScript (EPS ou PDF) seja a melhor opção. Mas a resposta exata depende do software usado pelo editor. Observe também que, geralmente, os jornais recomendam contra qualquer conversão dos gráficos produzidos pelo seu software gráfico. Portanto, se você pode exportar como EPS, é provavelmente a melhor opção. Se você só puder exportar SVG e fornecer SVG se o diário aceitar, não se converta em outro formato.
Alexey Popkov 08/09
Resposta fortemente relacionada com a descrição detalhada do procedimento para o Mathematica .
Alexey Popkov 06/06
2

Você também pode tentar im2graph ( http://www.im2graph.co.il ) para converter gráficos em dados. Funciona em Linux e Windows.

Shai Vaingast
fonte
2

Eu tive que fazer isso tantas vezes na minha carreira que acabei montando um programa javascript que está disponível aqui:

http://kdusling.github.io/projects/DataGrab/index.html

Desculpe, mas você ainda precisará clicar em todos os pontos. Embora você possa usar as teclas de seta, o que economiza um pouco de tensão no pulso.

Kevin Dusling
fonte
1

Para os Rusuários, o pacote grImport(no CRAN ) pode importar gráficos vetoriais e convertê-los em objetos que R pode interpretar. Supõe-se que é possível converter PDF (ou outro formato vetorial de interesse) para o formato PostScript. Isso pode ser feito, por exemplo, com o Inkscape : importe ( File > Import) sua página PDF com sua figura para o Inkspace e File > Save As > Save as type: > PostScript *.ps. Depois que você tiver o seu *.psarquivo abaixo da grImportvinheta Importando gráficos vetoriais , mais relevante será a seção '4.1. Raspar dados de imagens '.

Você precisará do ghostscript no seu sistema operacional - tente fazer o download aqui .

Observe que, se você de alguma forma encontrar o erro 'status 127' do ghostscript ao ligar grImport::PostScriptTrace, siga a recomendação a partir daqui , que diz para definir manualmente o caminho para o ghostscript em sua máquina.

Aqui está um exemplo de código R para importar o arquivo PostScript para o 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)

Observe que, se o gráfico estiver em uma página em um arquivo PDF de várias páginas, você poderá dividir o documento com várias páginas PDFTK builder. Importe seu arquivo PDF de uma página no Ikscape e exclua quaisquer elementos extras (texto extra, elementos gráficos adicionais). Isso facilitará seu trabalho em R ao tentar capturar as coordenadas dos elementos gráficos em que você está interessado.

Valentine
fonte