그래프에서 데이터를 긁어내는 데 필요한 소프트웨어


56

누구나 직교 좌표 (표준, 일상 플롯)에 플롯 된 데이터 이미지를 가져 와서 그래프에 플롯 된 포인트의 좌표를 추출하는 소프트웨어 (바람직하게는 무료, 바람직하게는 오픈 소스)에 대한 경험이 있습니까?

본질적으로 이것은 데이터 마이닝 문제와 데이터 시각화 문제입니다.


2
한 가지 해결책은 이 회신에 대한 주석을 참조하십시오 . 오픈 소스 솔루션에는 이미지 처리 또는 래스터 GIS 소프트웨어 ( GRASS 가 후보 일 가능성이 있음) 또는 GNU Octave가 포함 됩니다. 나는이 특정 목적을 위해 사용하지 않았기 때문에 이것을 주석으로 언급하고 있으므로 명확한 해결책이 아닌 가능성으로 사용하십시오.
whuber

나는 그래프를 긁기 위해 특별히 코드 / 소프트웨어를 기대하고 있으며, 적어도 10 년 전에는 그런 패키지가 있었음을 기억하지만 지금은 이름을 기억할 수 없으며 현재 운영 체제에서 작동하는지 알 수 없습니다 .
Alex Holcombe


스캔 에서 데이터를 가져 오는 짧은 Mathematica 프로그램 .
Sjoerd C. de Vries

1
또한 내가 내 대답을 가리 자원 참조 사이의 관계 무엇 YX 이 음모를? .
Alexis

답변:



42

그래프 디지타이징 소프트웨어

다양한 옵션이 있지만 모두 기본적으로 동일한 워크 플로를 사용합니다.

  1. 이미지를 업로드
  2. 각 축의 두 지점에 값을 표시하여 x 및 y 스케일을 설정
  3. 스케일이 선형인지, 로그 등인지 표시
  4. 포인트를 클릭하십시오.
    • 일부 프로그램은 선이나 점을 자동으로 인식합니다. 나는 보통 점수를 따랐으며, 100 점으로도 도움이 되기에는 일관성이 없다고 생각한다. 다른 기호를 인식하는 것을 찾지 못했습니다. 이 기능은 라인을 디지털화하는 데 어려움을 겪을 수는 있지만 결코 그렇게 할 필요는 없습니다.

프로그램은 각 점을 xy 행렬로 반환합니다.

확대 / 축소 버전의 이미지를 업로드하거나 일부 프로그램에서 사용할 수있는 확대 / 축소 기능을 사용하여 이미지가 확대 / 축소되는 경우 종종 포인트를 선택하는 데 도움이됩니다.

많은 프로그램이 있으며 추가 기능, 유용성, 라이센스 및 비용이 다릅니다. 아래에 나열했습니다.

내가 사용한 모든 것이 잘 작동합니다. 측정 오류가 매우 작은 상황을 제외하고 그래프 스크래핑으로 인한 오류는 중요하지 않습니다 (예 : 디지털화 오류 << 오류 막대의 크기 또는 추정값의 불확실성). 이러한 프로그램의 정확성을 테스트하지는 않았지만 사용자 간, 프로그램 간 및 재생산 된 통계 분석 결과와 비교하는 것이 흥미로울 것입니다.

내가 사용한 프로그램 :

  • 디지타이저 (무료 소프트웨어, GPL) 자동 포인트 / 라인 인식 Ubuntu 리포지토리 (engauge-digitizer)에서 사용 가능
  • 데이터 가져 오기 (셰어웨어)에는 확대 창, 자동 포인트 / 라인 인식 기능이 있습니다
  • DigitizeIt (쉐어웨어) 자동 포인트 / 라인 인식
  • ImageJ (오픈 소스, R 디지털화 후 가장 확장 가능)
  • R의 모든 단계를 R로 유지하여 그래프에서 데이터를 분석으로 가져 오는 프로세스를 단순화하므로 R 디지털화 (무료, 오픈 소스). R- 저널자습서를 참조하십시오.
  • 그것을 잡아! (무료 데모, $ 69) Excel 플러그인
  • WebPlotDigitzer (무료, 온라인). 브라우저 기반, 이미지에서 데이터를 추출합니다. 여기에서 검토했습니다 .

내가 사용하지 않은 프로그램 :

  • GraphClick (Mac, $ 8)
  • g3data (오픈 소스 -GNU GPL) 자동 인식 기능이없는 확대 / 축소 창이 있습니다. 우분투 리포지토리에서 사용 가능합니다.
  • 독점 플랫폼 인 Matlab에서 실행되는 GRABIT OpenSource (BSD) 플러그인

TL; DR : WebPlotDigitizer크롬 플러그인 뿐만 아니라 웹 애플리케이션 으로도 사용 가능


g3data (오픈 소스 -GNU GPL)에는 자동 인식 기능이없는 확대 / 축소 창이 있습니다. 우분투 리포지토리에서 사용 가능합니다. 내가 시도한 유일한 것이므로 비교할 수 없습니다. 하지만 사용하기가 매우 쉽다는 것을 알았습니다.
Scortchi-Monica Monica 복원

R 디지털화가 CRAN에서 제거 된 이유는 무엇입니까?
Léo Léopold Hertz 준영

1
@이 대부분은 pdf에서 작동하지 않으며 pdf 파일에서는 그림을 크게 만든 다음 화면 캡처 (예 : Mac의 cmd-shift-4)를 사용하여 그림을 jpg 또는 png로 저장합니다.
David LeBauer

1
@Masi CRAN에서 패키지를 유지 관리하는 것은 많은 추가 작업이 될 수 있습니다. 패키지는 GitHub github.com/tpoisot/digitize에서
David LeBauer

1
@ '시스템 적으로'가 구체적으로 무엇을 의미합니까? 문제의 인물에 연결할 수 있습니까? '교차'라고 말할 때 점이 축 내에 포함되어 표시되지 않음을 의미합니까?
David LeBauer

16

다른 응답자는 그래프의 래스터 이미지를 처리한다고 가정합니다. 그러나 요즘에는 그래프를 벡터 형식으로 게시하는 것이 좋습니다. 이 경우 래스터 이미지로 변환하지 않고 벡터 그래프의 코드로 직접 작업하면 복구 된 데이터의 정확도가 훨씬 높아지고 복구 오류를 추정 할 수 있습니다.

논문은 온라인으로 PDF 파일로 출판되기 때문에 복구하려는 데이터가있는 벡터 플롯 (숫자 형식으로 표시)이 포함 된 PDF 파일이 있다고 가정하고 도입 된 복구 오류를 추정합니다.

우선, PDF는 기본적으로 텍스트 형식의 벡터 형식입니다 (텍스트 편집기에서 읽을 수 있음). 문제는 텍스트 편집기에서 데이터를 읽기 위해 압축을 풀어야하는 압축 된 데이터 스트림을 포함 할 수 있다는 것입니다. 이러한 압축 된 데이터 스트림에는 일반적으로 필요한 정보가 포함됩니다.

읽을 수있는 PDF 코드를 사용하여 PDF 파일을 텍스트 문서로 변환하기 위해 데이터 스트림을 압축 해제하는 방법에는 여러 가지가 있습니다. 아마도 가장 간단한 방법은 옵션으로 무료 QPDF 유틸리티 를 사용 하는 --stream-data=uncompress것입니다 .

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

다른 방법은 여기여기에 설명 되어 있습니다 .

생성 된 outfile.pdf는 텍스트 편집기로 열 수 있습니다. 이제 내용을 이해 하려면 PDF Reference Manual 1.7 이 필요합니다 . 지금 당황하지 마십시오! 226-227 페이지의 "TABLE 4.9 경로 구성 연산자"에 설명 된 연산자는 몇 개만 알아야합니다. 가장 중요한 연산자는 다음과 같습니다 (첫 번째 열에는 연산자에 대한 좌표 사양이 있고 두 번째 열에는 연산자가 있고 세 번째는 연산자 이름 임) ) :

x y               m   moveto 

x y               l   lineto 

x y width height  re  rectangle

                  h   closepath

대부분의 경우 데이터 복구를 위해이 네 가지 연산자를 아는 것으로 충분합니다.

이제 outfile.pdf 파일을 데이터로 조작 할 수있는 일부 프로그램으로 텍스트로 가져와야합니다. Mathematica로 어떻게하는지 보여 드리겠습니다 .

파일 가져 오기 :

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

이제 가장 간단한 경우를 가정합니다. 그래프에는 많은 두 점으로 구성된 선이 포함되어 있습니다. 이 경우 라인의 각 세그먼트는 다음과 같이 인코딩됩니다.

268.79999 408.92975 m
272.39999 408.92975 l

PDF 코드에서 이러한 모든 세그먼트 추출

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

그것들을 시각화 :

Graphics[{Line[lines]}]

다음과 같은 것을 얻습니다 (작업중 인 용지에는 4 개의 그래프가 있습니다).

음모

인접한 두 세그먼트는 하나의 포인트를 공유합니다. 따라서이 경우 인접한 세그먼트의 시퀀스를 경로로 바꿀 수 있습니다.

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

이제 모든 경로를 개별적으로 시각화 할 수 있습니다.

Graphics[{Line /@ paths}]

이 그림에서 찾고자하는 경로를 두 번 클릭하여 선택하고 그래픽 선택을 복사하여 new로 붙여 넣을 수 있습니다 Graphics. 다시 포인트 목록으로 변환하려면 요소를 사용 {1, 1, 1}합니다. 이제 그래프의 좌표계가 아니라 PDF 파일의 좌표계에 점이 있습니다. 우리는 그들 사이의 관계를 확립해야합니다.

위의 플롯에서 손으로 틱을 선택한 Shift다음 (여러 항목 선택 대기) 틱 을 복사하여 new로 붙여 넣습니다 Graphics. 가로 눈금의 좌표를 추출하는 방법은 다음과 같습니다.

스크린 샷

이제 진드기의 차이점을 확인하십시오.

Differences[reHorTicks]

이러한 차이점을 통해 PDF 파일에서 눈금의 위치가 얼마나 정확한지 알 수 있습니다. 원본 데이터 포인트를 PDF 파일에 포함 된 벡터 그래프로 변환하여 발생하는 오류를 추정합니다. 진드기 위치 지정에 상당한 오차가있는 경우 진드기의 좌표를 선형 모형에 맞춰 오차를 줄일 수 있습니다. 이제이 선형 함수를 사용하여 경로 점의 원래 좌표를 얻을 수 있습니다 (즉, 플롯의 좌표계에 있음).


2
알렉세이 (Alexey)는 썼지 만 요즘에는 그래프를 벡터 형식으로 게시하는 것이 좋습니다. 어떤 벡터 형식에 대한 모범 사례에 대한 참조 자료가 있습니까? (저는 LaTeX 원고에 svg 파일의 eps 캡슐화를 사용해야합니까, 아니면 그래프를 LaTeX에 직접 출력해야합니까?) 건배.
Alexis

1
@Alexis 저는 현대 저널의 권장 사항을 참조하여 그래프를 벡터 형태로 제공합니다. 저널마다 다른 벡터 형식의 하위 집합을 사용할 수 있습니다. 일반적으로 한 형식에서 다른 형식으로의 변환이 적을 때 더 나은 품질을 기대합니다.
Alexey Popkov

@Alexis 기본적으로 PostScript 형식 중 하나 (EPS 또는 PDF)로 그래프를 제공하는 것이 최선의 선택이라고 생각합니다. 그러나 정확한 답변은 게시자가 사용하는 소프트웨어에 따라 다릅니다. 일반적으로 저널은 그래프 소프트웨어에서 생성 된 그래프의 변환을 권장하지 않습니다. 따라서 EPS로 내보낼 수 있다면 아마도 최선의 선택 일 것입니다. SVG 만 내보낼 수 있고 저널에서 SVG를 허용하는 경우 SVG를 제공하면 다른 형식으로 변환하지 마십시오.
Alexey Popkov

Mathematica 절차에 대한 자세한 설명이 포함 된 강력한 답변 .
Alexey Popkov 2016









1

를 들어 R사용자 패키지 grImport(에 크랑는 ) 벡터 그래픽을 가져올 수 있으며, R이 해석 할 수있는 객체로 변환합니다. PDF (또는 관심있는 다른 벡터 형식)를 PostScript 형식으로 변환 할 수 있다고 가정합니다. 이와 함께 예를 들어 수행 할 수 있습니다 잉크 스케이프 : 수입 ( File > Import) 당신의 PDF 페이지를 Inkspace과에 당신의 그림으로 File > Save As > Save as type: > PostScript *.ps. 당신은 일단 당신의 *.ps파일은 경작 grImport네트 벡터 그래픽 가져 오기 , 관련성이 존재 섹션 '4.1. 이미지에서 데이터 스크랩.

운영 체제에 고스트 스크립트가 필요 합니다 . 여기 에서 다운로드 하십시오 .

을 호출 할 때 어떻게해서 고스트 스크립트 오류 'status 127'이 발생하면 여기grImport::PostScriptTrace 에서 권장 사항 을 따르십시오.

PostScript 파일을 R로 가져 오는 샘플 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)

그래프가 여러 페이지 PDF 파일의 한 페이지에있는 경우 여러 페이지 문서를로 분할 할 수 있습니다 PDFTK builder. Ikscape에서 한 페이지 PDF 파일을 가져오고 추가 요소 (추가 텍스트, 추가 그래프 요소)를 삭제하십시오. 이것은 관심있는 그래프 요소의 좌표를 잡으려고 할 때 R 작업을 용이하게합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.