Phần mềm cần thiết để cạo dữ liệu từ biểu đồ [đã đóng]


56

Bất kỳ ai cũng có kinh nghiệm với phần mềm (tốt nhất là miễn phí, tốt nhất là nguồn mở) sẽ lấy hình ảnh của dữ liệu được vẽ trên tọa độ cartesian (một âm mưu chuẩn, hàng ngày) và trích xuất tọa độ của các điểm được vẽ trên biểu đồ?

Về cơ bản, đây là một vấn đề khai thác dữ liệu và một vấn đề trực quan hóa dữ liệu ngược .


2
Đối với một giải pháp, xem các ý kiến ​​để trả lời này . Các giải pháp nguồn mở sẽ bao gồm xử lý hình ảnh hoặc phần mềm GIS raster ( GRASS là một ứng cử viên có khả năng) hoặc, có lẽ, GNU Octave . Tôi đang đề cập đến những điều này như một bình luận vì tôi chưa sử dụng cho mục đích cụ thể này, vì vậy vui lòng xem chúng như những khả năng, không phải là giải pháp xác định.
whuber

Tôi hy vọng mã / phần mềm đặc biệt để quét đồ thị và tôi nhớ các gói như vậy đã tồn tại, ít nhất là chúng đã tồn tại 10 năm trước, nhưng tôi không thể nhớ tên của chúng bây giờ và không biết chúng có hoạt động trên các hệ điều hành hiện tại không .
Alex Holcombe


Một chương trình Mathicala ngắn để lấy dữ liệu từ các bản quét tại đây .
Sjoerd C. de Vries

1
Xem thêm tài nguyên tôi chỉ ra trong câu trả lời của tôi về mối quan hệ giữa YX trong cốt truyện này là gì? .
Alexis

Câu trả lời:



42

phần mềm số hóa đồ thị

Có nhiều tùy chọn khác nhau, nhưng về cơ bản tất cả đều sử dụng cùng một quy trình công việc:

  1. tải lên một hình ảnh
  2. đặt tỷ lệ x và y bằng cách chỉ ra các giá trị tại hai điểm trên mỗi trục
  3. cho biết nếu quy mô là tuyến tính, log, vv,
  4. bấm vào các điểm.
    • Một số chương trình tự động nhận ra các dòng hoặc điểm. Tôi thường sau các điểm, và tôi thấy chúng quá không phù hợp để có ích ngay cả với 100 điểm. Tôi đã không tìm thấy một trong đó nhận ra các biểu tượng khác nhau. Tính năng này có thể gây rắc rối cho việc số hóa các dòng, nhưng tôi chưa bao giờ phải làm điều này.

Chương trình trả về mỗi điểm dưới dạng ma trận xy.

Thông thường, nó giúp chọn điểm nếu hình ảnh được phóng to, bằng cách tải lên phiên bản phóng to của hình ảnh hoặc sử dụng tính năng thu phóng có sẵn trong một số chương trình.

Có nhiều chương trình, và chúng khác nhau về các tính năng bổ sung, khả năng sử dụng, cấp phép và chi phí. Tôi đã liệt kê chúng dưới đây.

Tất cả những cái tôi đã sử dụng làm việc tốt. Ngoại trừ trong các bối cảnh có sai số đo rất nhỏ, lỗi từ quét đồ thị là không đáng kể (ví dụ: lỗi từ số hóa << kích thước của các thanh lỗi hoặc độ không đảm bảo trong ước tính). Nếu chưa kiểm tra tính chính xác của bất kỳ chương trình nào trong số này, nhưng sẽ rất thú vị khi so sánh giữa những người dùng, giữa các chương trình và so với kết quả phân tích thống kê được sao chép.

Các chương trình tôi đã sử dụng:

  • Số hóa (phần mềm miễn phí, GPL) tự động nhận dạng điểm / đường. Có sẵn trong kho lưu trữ Ubuntu (engauge-Digitizer)
  • Nhận dữ liệu (phần mềm chia sẻ) có cửa sổ thu phóng, nhận dạng điểm / đường tự động
  • DigitizeIt (phần mềm chia sẻ) nhận dạng điểm / đường tự động
  • ImageJ (mã nguồn mở, có thể mở rộng nhất sau khi số hóa R)
  • Số hóa R (miễn phí, mã nguồn mở), vì nó đơn giản hóa các quy trình lấy dữ liệu từ biểu đồ thành phân tích bằng cách giữ tất cả các bước trong R. Xem hướng dẫn trong R-Tạp chí
  • Lấy nó! (bản dùng thử miễn phí, $ 69) Trình cắm Excel
  • WebPlotDigitzer (miễn phí, trực tuyến). Trình duyệt dựa trên, trích xuất dữ liệu từ hình ảnh. Đánh giá ở đây .

Các chương trình tôi chưa sử dụng:

  • GraphClick (Mac, $ 8)
  • g3data (mã nguồn mở - GNU GPL) Có cửa sổ thu phóng, không có nhận dạng tự động. Có sẵn trong kho Ubuntu.
  • Plugin GRABIT OpenSource (BSD) chạy trong nền tảng độc quyền, Matlab

TL; DR: WebPlotDigitizer có sẵn dưới dạng ứng dụng web cũng như plugin chrome


g3data (mã nguồn mở - GNU GPL) có cửa sổ thu phóng, không có nhận dạng tự động. Có sẵn trong kho Ubuntu. Tôi không thể so sánh, vì đó là người duy nhất tôi đã thử; nhưng tôi thấy nó rất dễ sử dụng
Scortchi - Phục hồi Monica

Tại sao R số hóa đã bị xóa khỏi CRAN?
Léo Léopold Hertz

1
@ Hầu hết những thứ này không hoạt động với pdf, với các tệp pdf tôi làm cho hình lớn và sau đó sử dụng một ảnh chụp màn hình (ví dụ cmd-shift-4 trên Mac) để lưu hình dưới dạng jpg hoặc png.
David LeBauer

1
@Masi Duy trì một gói trên CRAN có thể là rất nhiều công việc bổ sung. Gói có sẵn trên GitHub github.com/tpoisot/digitize
David LeBauer

1
@Masi cụ thể bạn có ý gì bởi 'có hệ thống'? Bạn có thể liên kết đến (các) con số trong câu hỏi? Khi bạn nói 'giao nhau', bạn có nghĩa là điểm được chứa trong trục và do đó không xuất hiện?
David LeBauer

16

Những người trả lời khác cho rằng bạn đối phó với hình ảnh raster của đồ thị. Nhưng ngày nay, cách làm tốt là xuất bản đồ thị dưới dạng vector. Trong trường hợp này, bạn có thể đạt được độ chính xác cao hơn của dữ liệu đã phục hồi và thậm chí ước tính lỗi khôi phục nếu bạn làm việc trực tiếp với mã của biểu đồ vectơ, mà không chuyển đổi nó thành hình ảnh raster.

Vì các bài báo được xuất bản trực tuyến dưới dạng tệp PDF, tôi giả sử rằng bạn có tệp PDF chứa biểu đồ vectơ với dữ liệu bạn muốn khôi phục từ đó (ở dạng số) và ước tính lỗi khôi phục được giới thiệu.

Trước hết, PDF là một định dạng vector về cơ bản là văn bản (có thể được đọc bởi một trình soạn thảo văn bản). Vấn đề là nó có thể (và hầu như luôn luôn) chứa các luồng dữ liệu nén mà không cần phải nén để đọc chúng bằng trình soạn thảo văn bản. Những luồng dữ liệu nén này thường chứa thông tin chúng ta cần.

Có một số cách để giải nén luồng dữ liệu để chuyển đổi tệp PDF thành tài liệu văn bản với mã PDF có thể đọc được. Có lẽ cách đơn giản nhất là sử dụng tiện ích QPDF miễn phí với --stream-data=uncompresstùy chọn :

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

Một số cách khác được mô tả ở đâyở đây .

Outfile.pdf được tạo có thể được mở bằng trình soạn thảo văn bản. Bây giờ bạn cần PDF Reference Guide 1.7 để hiểu những gì bạn thấy. Đừng hoảng sợ vào lúc này! Bạn chỉ cần biết một vài toán tử được mô tả trong "BẢNG 4.9 Toán tử xây dựng đường dẫn" trên trang 226 - 227. Các toán tử quan trọng nhất là (cột đầu tiên chứa thông số tọa độ cho toán tử, cột thứ hai chứa toán tử và cột thứ ba là tên toán tử ):

x y               m   moveto 

x y               l   lineto 

x y width height  re  rectangle

                  h   closepath

Trong hầu hết các trường hợp, việc biết bốn toán tử này để khôi phục dữ liệu là đủ.

Bây giờ bạn cần nhập tệp outfile.pdf dưới dạng văn bản vào một số chương trình nơi bạn có thể thao tác dữ liệu. Tôi sẽ chỉ cho bạn cách làm với Mathicala .

Nhập tệp:

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

Bây giờ tôi giả sử trường hợp đơn giản nhất: biểu đồ chứa một dòng bao gồm nhiều phân đoạn hai điểm. Trong trường hợp này, mỗi phân đoạn của dòng được mã hóa như thế này:

268.79999 408.92975 m
272.39999 408.92975 l

Trích xuất tất cả các phân đoạn như vậy từ mã PDF:

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

Hình dung chúng:

Graphics[{Line[lines]}]

Bạn nhận được một cái gì đó như thế này (bài báo tôi đang làm việc có chứa bốn biểu đồ):

âm mưu

Mỗi hai đoạn liền kề chia sẻ một điểm. Vì vậy, trong trường hợp này, bạn có thể biến các chuỗi của các phân đoạn liền kề thành các đường dẫn:

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

Bây giờ bạn có thể hình dung tất cả các đường dẫn riêng biệt:

Graphics[{Line /@ paths}]

Từ hình này, bạn có thể chọn (bằng cách nhấp đúp) vào đường dẫn bạn đang tìm, sao chép lựa chọn đồ họa và dán như mới Graphics. Để chuyển đổi nó lạc hậu vào danh sách các điểm bạn lấy phần tử {1, 1, 1}. Bây giờ chúng ta có các điểm không nằm trong hệ tọa độ của đồ thị mà trong hệ tọa độ của tệp PDF. Chúng ta cần thiết lập mối quan hệ giữa họ.

Từ âm mưu trên, bạn chọn tick bằng tay (giữ Shiftcho nhiều lựa chọn), sau đó sao chép chúng và dán như mới Graphics. Đây là cách bạn có thể trích xuất tọa độ của dấu ngang:

ảnh chụp màn hình

Bây giờ hãy kiểm tra sự khác biệt giữa các dấu tick:

Differences[reHorTicks]

Từ những khác biệt này, bạn có thể thấy chính xác vị trí của bọ ve trong tệp PDF. Nó đưa ra ước tính lỗi được đưa ra bằng cách chuyển đổi các biểu dữ liệu gốc thành biểu đồ vectơ có trong tệp PDF. Nếu có lỗi đáng kể trong định vị bọ ve, bạn có thể giảm lỗi bằng cách khớp tọa độ của bọ ve với mô hình tuyến tính. Hàm tuyến tính này bây giờ có thể được sử dụng để lấy tọa độ gốc của các điểm của đường dẫn (đó là trong hệ tọa độ của ô).


2
Alexey, bạn đã viết Nhưng ngày nay, cách thực hành tốt là xuất bản các biểu đồ dưới dạng vector. Bạn có một tài liệu tham khảo tốt cho thực hành tốt nhất xung quanh định dạng vector (s)? (Tôi nên sử dụng gói đóng gói eps của tệp svg trong các bản thảo LaTeX của mình, hay tôi có nên xuất đồ thị trực tiếp lên LaTeX không?) Chúc mừng.
Alexis

1
@Alexis Tôi đề cập đến các khuyến nghị của tạp chí hiện đại để cung cấp các biểu đồ ở dạng vector. Các tạp chí khác nhau chấp nhận các tập hợp con khác nhau của các định dạng vector. Nói chung, tôi mong đợi chất lượng tốt hơn khi có các biến đổi ít hơn từ định dạng này sang định dạng khác.
Alexey Popkov

@Alexis Vì vậy, về cơ bản tôi hy vọng rằng việc cung cấp biểu đồ ở một trong các định dạng PostScript (EPS hoặc PDF) sẽ là lựa chọn tốt nhất. Nhưng câu trả lời chính xác phụ thuộc vào phần mềm được sử dụng bởi nhà xuất bản. Cũng lưu ý rằng thông thường các tạp chí đề xuất chống lại mọi chuyển đổi của biểu đồ được tạo bởi phần mềm vẽ biểu đồ của bạn. Vì vậy, nếu bạn có thể xuất dưới dạng EPS thì có lẽ đây là lựa chọn tốt nhất. Nếu bạn chỉ có thể xuất SVG thì hãy cung cấp SVG nếu tạp chí chấp nhận nó, đừng tự chuyển đổi sang định dạng khác.
Alexey Popkov

Câu trả lời liên quan mạnh mẽ với mô tả chi tiết về thủ tục cho Mathicala .
Alexey Popkov







2

Tôi đã phải làm điều này rất nhiều lần trong sự nghiệp của mình, cuối cùng tôi đã kết hợp một chương trình javascript có sẵn ở đây:

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

Xin lỗi, nhưng bạn vẫn sẽ cần phải nhấp vào từng điểm. Mặc dù bạn có thể sử dụng các phím mũi tên giúp tiết kiệm một số căng thẳng cổ tay.



1

Đối với Rngười dùng, gói grImport(trên CRAN ) có thể nhập đồ họa vector và chuyển đổi chúng thành các đối tượng mà R có thể diễn giải. Nó giả định rằng người ta có thể chuyển đổi PDF (hoặc định dạng vector quan tâm khác) sang định dạng PostScript. Điều này có thể được thực hiện ví dụ với Inkscape : import ( File > Import) trang PDF của bạn với hình của bạn vào Inkspace và File > Save As > Save as type: > PostScript *.ps. Khi bạn có *.pstệp của mình bỏ grImporthọa tiết Nhập vào Đồ họa Vector , phần phù hợp hơn là phần '4.1. Quét dữ liệu từ hình ảnh '.

Bạn sẽ cần ghostscript trên Hệ điều hành của mình - hãy thử tải xuống từ đây .

Lưu ý, nếu bạn chạy bằng cách nào đó vào lỗi ghostscript 'status 127' khi bạn gọi grImport::PostScriptTrace, sau đó bỏ qua khuyến nghị từ đây , điều này nói rằng sẽ tự đặt đường dẫn đến ghostscript trên máy của bạn.

Dưới đây là một số mã R mẫu để nhập tệp PostScript và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)

Lưu ý, nếu biểu đồ của bạn nằm trên một trang trong tệp PDF nhiều trang, thì bạn có thể chia tài liệu nhiều trang với PDFTK builder. Nhập tệp PDF một trang của bạn trong Ikscape và xóa mọi phần tử phụ (văn bản bổ sung, phần tử biểu đồ phụ). Điều này sẽ làm giảm công việc của bạn trong R khi cố gắng bắt tọa độ của các thành phần biểu đồ mà bạn quan tâm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.