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.
data-visualization
data-mining
software
Alex Holcombe
fonte
fonte
Respostas:
Confira o digitize pacote para R . É projetado para resolver exatamente esse tipo de problema.
fonte
software de digitalização de gráficos
Existem muitas opções diferentes, mas todas usam basicamente o mesmo fluxo de trabalho:
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:
Programas que não usei:
TL; DR: o WebPlotDigitizer está disponível como aplicativo da Web e como plugin do Chrome
fonte
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=uncompress
opção :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 ):
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:
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:
Extraindo todos esses segmentos do código PDF:
Visualizando-os:
Você obtém algo assim (o trabalho com o qual estou trabalhando contém quatro gráficos):
Cada dois segmentos adjacentes compartilham um ponto. Portanto, neste caso, você pode transformar as seqüências de segmentos adjacentes em caminhos:
Agora você pode visualizar todos os caminhos separadamente:
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
Shift
para seleção múltipla), depois os copia e cola como novoGraphics
. Aqui está como você pode extrair coordenadas de marcações horizontais:Agora verifique as diferenças entre os ticks:
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).
fonte
Eu não o usei, mas o laboratório UWA CogSci recomenda o DataThief (shareware).
fonte
Confira engauge. Seu código-fonte gratuito e aberto http://digitizer.sourceforge.net/
fonte
Un-Scan-It http://www.silkscientific.com/graph-digitizer.htm
fonte
Experimente o scanit: http://amsterchem.com/scanit.html
É gratuito, roda em Windows
fonte
Você também pode tentar im2graph ( http://www.im2graph.co.il ) para converter gráficos em dados. Funciona em Linux e Windows.
fonte
'g3data' é um software que pode ser usado para servir seu propósito. É um software livre e eu o usei. Você pode baixá-lo aqui: http://www.frantz.fi/software/g3data.php
fonte
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.
fonte
O STIPlotDigitizer foi lançado recentemente.
http://stiwww.com/product/software-techniques-plot-digitizer
fonte
Para os
R
usuários, o pacotegrImport
(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 eFile > Save As > Save as type: > PostScript *.ps
. Depois que você tiver o seu*.ps
arquivo abaixo dagrImport
vinheta 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:
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.fonte