Uważam, że generowanie wykresów przez R może zająć dużo czasu, gdy obecne są miliony punktów - nic dziwnego, biorąc pod uwagę, że punkty są drukowane indywidualnie. Ponadto takie wykresy są często zbyt zagracone i gęste, aby były przydatne. Wiele punktów nakłada się i tworzy czarną masę, a wiele czasu spędza na wykreślaniu większej liczby punktów w tę masę.
Czy istnieją jakieś statystyczne alternatywy dla reprezentowania dużych danych w standardowym wykresie rozrzutu? Rozważałem wykres gęstości, ale jakie są inne alternatywy?
r
data-visualization
Alex Stoddard
źródło
źródło
Odpowiedzi:
Jest to trudne zadanie bez gotowych rozwiązań (dzieje się tak oczywiście, ponieważ wykres gęstości jest tak kuszącym powrotem, jak nikt tak naprawdę nie obchodzi). Więc co możesz zrobić?
Jeśli naprawdę się pokrywają (tzn. Mają dokładnie takie same współrzędne X i Y), a nie używasz alfa, najlepszym pomysłem byłoby po prostu zmniejszenie nakładania się przy użyciu
unique
(w przypadku alfa można to zsumować w takich grupach).Jeśli nie, możesz ręcznie zaokrąglić współrzędne do najbliższych pikseli i użyć poprzedniej metody (ale jest to brudne rozwiązanie).
Na koniec możesz wykonać wykres gęstości, aby użyć go do podpróbkowania punktów w najbardziej gęstych obszarach. To z drugiej strony nie stworzy dokładnie tej samej fabuły i może wprowadzić artefakty, jeśli nie zostanie dokładnie dostrojone.
źródło
unique
lub zaokrąglania może prowadzić do stronniczych (zwodniczych) wykresów. Ważne jest, aby w jakiś sposób wskazać stopień nakładania się za pomocą środków graficznych, takich jak lekkość lub wykresy słonecznika.Spójrz na pakiet hexbin , który implementuje papier / metodę Dana Carra. Pdf winieta ma więcej szczegółów, które cytuję poniżej:
źródło
smoothScatter {RColorBrewer}
idensCols {grDevices}
. Mogę potwierdzić, że działa całkiem dobrze z tysiącami do milionów punktów z danych genetycznych.Muszę przyznać, że nie do końca rozumiem twój ostatni akapit:
Nie jest również jasne, jakiego rodzaju wykresu (funkcji) szukasz.
Biorąc pod uwagę, że masz zmienne metryczne, przydatne mogą się okazać sześciokąty lub pola słonecznika. W celu uzyskania dalszych informacji patrz
źródło
Inną bezpośrednią odpowiedzią na to pytanie jest pakiet rgl, który może wykreślić miliony punktów za pomocą OpenGL. Określ także rozmiar punktu (np. 3) i pomniejsz, aby zobaczyć te centra mas jako monolityczne bloki, lub powiększ i zobacz strukturę tego, co kiedyś było monolityczne - rozmiary punktów są stałe, ale odległości między nimi na ekranie zależy od powiększenia. Można także użyć poziomów alfa.
źródło
Oto plik, do którego dzwonię
bigplotfix.R
. Jeśli je podasz, zdefiniuje opakowanie, dlaplot.xy
którego „kompresuje” dane wykresu, gdy jest ono bardzo duże. Opakowanie nie robi nic, jeśli dane wejściowe są małe, ale jeśli dane wejściowe są duże, to dzieli je na części i po prostu wykreśla maksymalną i minimalną wartość xiy dla każdej części. Sourcing ponowniebigplotfix.R
wiąże,graphics::plot.xy
aby wskazać opakowanie (wielokrotne pozyskiwanie jest OK).Należy pamiętać, że
plot.xy
jest to funkcja „koń pociągowy” dla standardowych metod kreślenia takich jakplot()
,lines()
ipoints()
. Dzięki temu możesz nadal używać tych funkcji w kodzie bez modyfikacji, a duże wykresy będą automatycznie kompresowane.To jest przykładowy wynik. Zasadniczo jest to
plot(runif(1e5))
z punktami i liniami oraz z wprowadzoną tutaj kompresją i bez niej. Wykres „skompresowanych punktów” nie trafia w środkowy obszar ze względu na charakter kompresji, ale wykres „linii skompresowanych” wygląda znacznie bliżej nieskompresowanego oryginału. Czasy dotycząpng()
urządzenia; z jakiegoś powodu punkty są znacznie szybsze wpng
urządzeniu niż wX11
urządzeniu, ale przyspieszenia wX11
są porównywalne (X11(type="cairo")
było wolniejsze niżX11(type="Xlib")
w moich eksperymentach).Powodem, dla którego to napisałem, jest to, że zmęczyło
plot()
mnie przypadkowe uruchamianie dużego zbioru danych (np. Pliku WAV). W takich przypadkach musiałbym wybierać między odczekaniem kilku minut na zakończenie wykresu a zakończeniem sesji R sygnałem (w ten sposób tracąc moją historię poleceń i zmienne). Teraz, jeśli pamiętam, aby załadować ten plik przed każdą sesją, w takich przypadkach mogę uzyskać użyteczny wykres. Mały komunikat ostrzegawczy wskazuje, kiedy dane wydruku zostały „skompresowane”.źródło
Może zostanę odrzucony za moją metodę, złe wspomnienia jednego z moich profesorów badawczych krzyczących na ludzi za wyrzucanie dobrych danych przez tłumaczenie ich na kategorie (oczywiście, zgadzam się teraz kilka dni lol), nie wiem. W każdym razie, jeśli mówisz o wykresie rozrzutu, to miałem te same problemy. Teraz, gdy mam dane liczbowe, nie ma dla mnie sensu klasyfikowanie ich do analizy. Ale wizualizacja to inna historia. To, co według mnie działa najlepiej, to najpierw (1) rozbić zmienną niezależną na grupy za pomocą funkcji cięcia. Możesz grać z liczbą grup, a następnie (2) po prostu wykreślić DV względem wyciętej wersji IV. R wygeneruje wykresy pudełkowe zamiast tego obrzydliwego wykresu punktowego. Polecam usunięcie wartości odstających z wykresu (użyj opcji konspekt = FAŁSZ w poleceniu plot). Ponownie, NIGDY nie zmarnowałbym idealnie dobrych danych liczbowych, kategoryzując, a następnie analizując. Robi to zbyt wiele problemów. Chociaż wiem, że to drażliwy temat debaty. Ale robienie tego specjalnie w celu przynajmniej wizualnego zrozumienia danych, nie wyrządzając przy tym wiele szkody. Wykreśliłem dane tak duże, jak 10M i nadal udało mi się to zrozumieć dzięki tej metodzie. Mam nadzieję, że to pomaga! Z poważaniem! widzieliśmy z tego. Wykreśliłem dane tak duże, jak 10M i nadal udało mi się to zrozumieć dzięki tej metodzie. Mam nadzieję, że to pomaga! Z poważaniem! widzieliśmy z tego. Wykreśliłem dane tak duże, jak 10M i nadal udało mi się to zrozumieć dzięki tej metodzie. Mam nadzieję, że to pomaga! Z poważaniem!
źródło
W przypadku dużych serii czasowych pokochałem smoothScatter (nie mniej niż część podstawy R). Często muszę podawać dodatkowe dane, a zachowanie podstawowego interfejsu API fabuły jest naprawdę pomocne, na przykład:
Co daje (jeśli wybaczysz projekt):
Jest zawsze dostępny i działa dobrze z ogromnymi zestawami danych, więc miło jest przynajmniej spojrzeć na to, co masz.
źródło