Oprogramowanie potrzebne do zeskrobywania danych z wykresu [zamknięte]


56

Czy ktoś ma jakieś doświadczenie z oprogramowaniem (najlepiej darmowym, najlepiej open source), które zrobi zdjęcie danych wykreślonych na współrzędnych kartezjańskich (standardowy, codzienny wykres) i wyodrębni współrzędne punktów wykreślonych na wykresie?

Zasadniczo jest to problem eksploracji danych i problem odwrotnej wizualizacji danych.


2
Dla jednego rozwiązania zobacz komentarze do tej odpowiedzi . Rozwiązania open source obejmowałyby przetwarzanie obrazu lub oprogramowanie rastrowe GIS ( prawdopodobnie kandydat na GRASS ) lub być może GNU Octave . Wspominam o nich jako komentarz, ponieważ nie wykorzystałem żadnego z nich do tego konkretnego celu, więc proszę, rozważcie je jako możliwości, a nie jako konkretne rozwiązania.
whuber

Mam nadzieję na kod / oprogramowanie przeznaczone specjalnie do skrobania wykresów i pamiętam, że takie pakiety istniały, przynajmniej 10 lat temu, ale nie pamiętam teraz ich nazw i nie wiem, czy działają na obecnych systemach operacyjnych .
Alex Holcombe,


Krótki program Mathematica do pobierania danych ze skanów tutaj .
Sjoerd C. de Vries,

1
Zobacz także zasób, który wskazuję w mojej odpowiedzi na Jaki jest związek między Y i X na tym wykresie? .
Alexis

Odpowiedzi:



42

oprogramowanie do digitalizacji grafów

Istnieje wiele różnych opcji, ale w zasadzie wszystkie używają tego samego przepływu pracy:

  1. prześlij zdjęcie
  2. ustaw skalę xiy, wskazując wartości w dwóch punktach na każdej osi
  3. wskazać, czy skala jest liniowa, log itp.,
  4. kliknij punkty.
    • Niektóre programy automatycznie rozpoznają linie lub punkty. Zwykle szukam punktów i uważam je za zbyt niespójne, aby były pomocne nawet przy setkach punktów. Nie znalazłem takiego, który rozpoznaje różne symbole. Ta funkcja może być warta kłopotów z digitalizacją linii, ale nigdy nie musiałem tego robić.

Program zwraca każdy punkt jako macierz xy.

Często pomaga wybrać punkty, jeśli obraz jest powiększony, przesyłając powiększoną wersję obrazu lub używając funkcji powiększania dostępnej w niektórych programach.

Istnieje wiele programów, które różnią się dodatkowymi funkcjami, użytecznością, licencjonowaniem i kosztami. Wymieniłem je poniżej.

Wszystkie te, z których korzystałem, działają dobrze. Z wyjątkiem kontekstów, w których błąd pomiaru jest bardzo mały, błąd zgarniania wykresu jest nieznaczny (np. Błąd digitalizacji << wielkość słupków błędów lub niepewność w oszacowaniu). Jeśli nie przetestowałem dokładności żadnego z tych programów, ale warto byłoby porównać użytkowników, programy i wyniki odtworzonych analiz statystycznych.

Programy, z których korzystałem:

  • Digitizer (darmowe oprogramowanie, GPL) automatyczne rozpoznawanie punktu / linii. Dostępne w repozytorium Ubuntu (engifier-digitizer)
  • Pobierz dane (shareware) ma okno powiększenia, automatyczne rozpoznawanie punktu / linii
  • DigitizeIt (shareware) automatyczne rozpoznawanie punktu / linii
  • ImageJ (open source, najbardziej rozszerzalny po digitalizacji R)
  • R digitalizacja (darmowa, open source), ponieważ upraszcza procesy pobierania danych z wykresu do analizy, zachowując wszystkie kroki w R. Zobacz samouczek w R-Journal
  • Chwyć to! (bezpłatne demo, 69 USD) Wtyczka Excel
  • WebPlotDigitzer (bezpłatny, online). Przeglądarka wyodrębnia dane z obrazów. Recenzja tutaj .

Programy, z których nie korzystałem:

  • GraphClick (Mac, 8 USD)
  • g3data (open source - GNU GPL) Ma okno powiększenia, brak automatycznego rozpoznawania. Dostępne w repozytorium Ubuntu.
  • Wtyczka GRABIT OpenSource (BSD) działająca na zastrzeżonej platformie Matlab

TL; DR: WebPlotDigitizer jest dostępny jako aplikacja internetowa oraz jako wtyczka chrome


g3data (open source - GNU GPL) ma okno powiększenia, brak automatycznego rozpoznawania. Dostępne w repozytorium Ubuntu. Nie mogę porównać, bo to jedyna próba; ale uznałem, że jest bardzo łatwy w użyciu.
Scortchi - Przywróć Monikę

Dlaczego digitalizacja R została usunięta z CRAN?
Léo Léopold Hertz

1
@ Większość z nich nie działa z pdf, dzięki plikom pdf powiększam figurę, a następnie używam zrzutu ekranu (np. Cmd-shift-4 na Macu), aby zapisać figurę jako jpg lub png.
David LeBauer,

1
@Masi Utrzymanie pakietu w CRAN może być bardzo dodatkowym zadaniem. Pakiet jest dostępny na GitHub github.com/tpoisot/digitize
David LeBauer

1
@Masi, co konkretnie masz na myśli mówiąc „systematycznie”? Czy możesz link do danych liczb? Kiedy mówisz „przecinaj się”, czy masz na myśli, że punkt jest zawarty w osi i dlatego się nie pojawia?
David LeBauer,

16

Inni odpowiadający zakładają, że masz do czynienia z obrazem rastrowym wykresu. Ale obecnie dobrą praktyką jest publikowanie wykresów w postaci wektorowej. W takim przypadku możesz osiągnąć znacznie wyższą dokładność odzyskanych danych, a nawet oszacować błąd odzyskiwania, jeśli pracujesz bezpośrednio z kodem wykresu wektorowego, bez konwersji go na obraz rastrowy.

Ponieważ artykuły są publikowane online jako pliki PDF, zakładam, że masz plik PDF, który zawiera wykres wektorowy z danymi, które chcesz odzyskać (uzyskać w formie liczbowej) i oszacować wprowadzony błąd odzyskiwania.

Przede wszystkim PDF to format wektorowy, który jest zasadniczo tekstowy (może być odczytany przez edytor tekstu). Problem polega na tym, że może (i prawie zawsze) zawierać skompresowane strumienie danych, które wymagają dekompresji w celu odczytania ich przez edytor tekstu. Te skompresowane strumienie danych zwykle zawierają potrzebne informacje.

Istnieje kilka sposobów dekompresji strumieni danych w celu konwersji pliku PDF na dokument tekstowy z czytelnym kodem PDF. Prawdopodobnie najprostszym sposobem jest użycie darmowego narzędzia QPDF z --stream-data=uncompressopcją :

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

Niektóre inne sposoby opisano tutaj i tutaj .

Wygenerowany plik outfile.pdf można otworzyć za pomocą edytora tekstu. Teraz potrzebujesz PDF Reference Manual 1.7, aby zrozumieć, co widzisz. Nie panikuj w tej chwili! Musisz znać tylko kilku operatorów opisanych w „TABELI 4.9 Operatory budowy ścieżki” na stronach 226–227. Najważniejszymi operatorami są (pierwsza kolumna zawiera specyfikację współrzędnych dla operatora, druga zawiera operator, a trzecia to nazwa operatora ):

x y               m   moveto 

x y               l   lineto 

x y width height  re  rectangle

                  h   closepath

W większości przypadków wystarczy znać tych czterech operatorów do odzyskiwania danych.

Teraz musisz zaimportować plik outfile.pdf jako tekst do jakiegoś programu, w którym możesz manipulować danymi. Pokażę, jak to zrobić z Mathematica .

Importowanie pliku:

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

Teraz zakładam najprostszy przypadek: wykres zawiera linię, która składa się z wielu dwupunktowych segmentów. W takim przypadku każdy segment linii jest kodowany w następujący sposób:

268.79999 408.92975 m
272.39999 408.92975 l

Wyodrębnianie wszystkich takich segmentów z kodu PDF:

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

Wizualizacja ich:

Graphics[{Line[lines]}]

Otrzymujesz coś takiego (praca, z którą pracuję zawiera cztery wykresy):

wątek

Każde dwa sąsiednie segmenty mają jeden punkt. W tym przypadku możesz przekształcić sekwencje sąsiednich segmentów w ścieżki:

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

Teraz możesz wizualizować wszystkie ścieżki osobno:

Graphics[{Line /@ paths}]

Na tej figurze możesz wybrać (klikając dwukrotnie) szukaną ścieżkę, skopiować zaznaczenie grafiki i wkleić jako nową Graphics. Aby przekonwertować go do tyłu na listę punktów, weź element {1, 1, 1}. Teraz mamy punkty nie w układzie współrzędnych wykresu, ale w układzie współrzędnych pliku PDF. Musimy ustalić relacje między nimi.

Z powyższego wykresu wybierasz ręcznie kleszcze (przytrzymując Shiftdla wielokrotnego wyboru), a następnie kopiujesz je i wklej jako nowe Graphics. Oto, w jaki sposób można wyodrębnić współrzędne poziomych kleszczy:

zrzut ekranu

Teraz sprawdź różnice między kleszczami:

Differences[reHorTicks]

Na podstawie tych różnic można zobaczyć, jak dokładne jest umieszczanie znaczników w pliku PDF. Daje oszacowanie błędu wprowadzonego przez konwersję oryginalnych punktów danych na wykres wektorowy zawarty w pliku PDF. Jeśli występują znaczące błędy w pozycjonowaniu kleszczy, możesz zmniejszyć błąd, dopasowując współrzędne kleszczy do modelu liniowego. Tej funkcji liniowej można teraz użyć do uzyskania oryginalnych współrzędnych punktów ścieżki (czyli w układzie współrzędnych wykresu).


2
Aleksiej, napisałeś Ale dobrą praktyką jest obecnie publikowanie wykresów w formie wektorowej. Czy masz dobre referencje na temat najlepszych praktyk, wokół których formatów wektorowych? (Czy powinienem używać enkapsulacji eps pliku SVG w moich manuskryptach LaTeXa, czy powinienem wysyłać wykres bezpośrednio do LaTeXa?) Na zdrowie.
Alexis,

1
@Alexis Odwołuję się do zaleceń współczesnego czasopisma, aby dostarczyć wykresy w postaci wektorowej. Różne czasopisma akceptują różne podzbiory formatów wektorowych. Zasadniczo oczekuję lepszej jakości w przypadku mniejszych przekształceń z jednego formatu na inny.
Alexey Popkov

@Alexis Zasadniczo spodziewam się, że udostępnianie wykresów w jednym z formatów PostScript (EPS lub PDF) powinno być najlepszą opcją. Ale dokładna odpowiedź zależy od oprogramowania używanego przez wydawcę. Należy również pamiętać, że zwykle czasopisma nie zalecają konwersji wykresów tworzonych przez oprogramowanie do tworzenia wykresów. Więc jeśli możesz eksportować jako EPS, jest to prawdopodobnie najlepsza opcja. Jeśli możesz eksportować tylko SVG, podaj SVG, jeśli dziennik je akceptuje, nie konwertuj się na inny format.
Aleksiej Popkow

Mocno powiązana odpowiedź ze szczegółowym opisem procedury dla Mathematica .
Alexey Popkov,









1

Dla Rużytkowników pakiet grImport(w CRAN ) może importować grafikę wektorową i konwertować je na obiekty, które R może interpretować. Zakłada się, że można konwertować PDF (lub inny interesujący format wektorowy) na format PostScript. Można to zrobić na przykład za pomocą Inkscape : import ( File > Import) strony PDF z rysunkiem do Inkspace i File > Save As > Save as type: > PostScript *.ps. Gdy *.psplik pojawi się w grImportwiniecie Importowanie grafiki wektorowej , bardziej odpowiedni jest rozdział „4.1. Skrobanie danych z obrazów ”.

Będziesz potrzebował ghostscript na swoim systemie operacyjnym - spróbuj go pobrać stąd .

Uwaga, jeśli uruchomić jakoś w błąd ghostscript „status 127” podczas rozmowy grImport::PostScriptTrace, a następnie daniele zalecenie od tutaj , które mówi, aby ręcznie ustawić ścieżkę do Ghostscript na komputerze.

Oto przykładowy kod R do importowania pliku PostScript do 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)

Uwaga: jeśli wykres znajduje się na stronie w wielostronicowym pliku PDF, możesz podzielić dokument wielostronicowy za pomocą PDFTK builder. Zaimportuj jednostronicowy plik PDF w Ikscape i usuń wszelkie dodatkowe elementy (dodatkowy tekst, dodatkowe elementy wykresu). Ułatwi to pracę w R, gdy będziesz próbował złapać współrzędne interesujących cię elementów wykresu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.