누구나 직교 좌표 (표준, 일상 플롯)에 플롯 된 데이터 이미지를 가져 와서 그래프에 플롯 된 포인트의 좌표를 추출하는 소프트웨어 (바람직하게는 무료, 바람직하게는 오픈 소스)에 대한 경험이 있습니까?
본질적으로 이것은 데이터 마이닝 문제와 역 데이터 시각화 문제입니다.
누구나 직교 좌표 (표준, 일상 플롯)에 플롯 된 데이터 이미지를 가져 와서 그래프에 플롯 된 포인트의 좌표를 추출하는 소프트웨어 (바람직하게는 무료, 바람직하게는 오픈 소스)에 대한 경험이 있습니까?
본질적으로 이것은 데이터 마이닝 문제와 역 데이터 시각화 문제입니다.
답변:
다양한 옵션이 있지만 모두 기본적으로 동일한 워크 플로를 사용합니다.
프로그램은 각 점을 xy 행렬로 반환합니다.
확대 / 축소 버전의 이미지를 업로드하거나 일부 프로그램에서 사용할 수있는 확대 / 축소 기능을 사용하여 이미지가 확대 / 축소되는 경우 종종 포인트를 선택하는 데 도움이됩니다.
많은 프로그램이 있으며 추가 기능, 유용성, 라이센스 및 비용이 다릅니다. 아래에 나열했습니다.
내가 사용한 모든 것이 잘 작동합니다. 측정 오류가 매우 작은 상황을 제외하고 그래프 스크래핑으로 인한 오류는 중요하지 않습니다 (예 : 디지털화 오류 << 오류 막대의 크기 또는 추정값의 불확실성). 이러한 프로그램의 정확성을 테스트하지는 않았지만 사용자 간, 프로그램 간 및 재생산 된 통계 분석 결과와 비교하는 것이 흥미로울 것입니다.
TL; DR : WebPlotDigitizer 는 크롬 플러그인 뿐만 아니라 웹 애플리케이션 으로도 사용 가능
다른 응답자는 그래프의 래스터 이미지를 처리한다고 가정합니다. 그러나 요즘에는 그래프를 벡터 형식으로 게시하는 것이 좋습니다. 이 경우 래스터 이미지로 변환하지 않고 벡터 그래프의 코드로 직접 작업하면 복구 된 데이터의 정확도가 훨씬 높아지고 복구 오류를 추정 할 수 있습니다.
논문은 온라인으로 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 파일에 포함 된 벡터 그래프로 변환하여 발생하는 오류를 추정합니다. 진드기 위치 지정에 상당한 오차가있는 경우 진드기의 좌표를 선형 모형에 맞춰 오차를 줄일 수 있습니다. 이제이 선형 함수를 사용하여 경로 점의 원래 좌표를 얻을 수 있습니다 (즉, 플롯의 좌표계에 있음).
나는 그것을 사용하지 않았지만 UWA CogSci 랩 은 DataThief (쉐어웨어)를 권장 합니다.
engauge를 확인하십시오. 무료 및 오픈 소스 http://digitizer.sourceforge.net/
scanit을 시도하십시오 : http://amsterchem.com/scanit.html
무료이며 Windows에서 실행됩니다.
im2graph ( http://www.im2graph.co.il )를 사용하여 그래프를 데이터로 변환 할 수도 있습니다 . Linux 및 Windows에서 작동합니다.
'g3data'는 귀하의 목적에 맞는 소프트웨어입니다. 그것은 무료 소프트웨어이며 사용했습니다. 여기에서 다운로드 할 수 있습니다 : http://www.frantz.fi/software/g3data.php
나는 내 경력 에서이 작업을 여러 번해야했지만 결국 여기에서 사용할 수있는 자바 스크립트 프로그램을 구성했습니다.
http://kdusling.github.io/projects/DataGrab/index.html
죄송하지만 모든 지점을 클릭해야합니다. 손목의 피로를 덜어주는 화살표 키를 사용할 수 있습니다.
STIPlotDigitizer가 새로 출시되었습니다.
http://stiwww.com/product/software-techniques-plot-digitizer
를 들어 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 작업을 용이하게합니다.