Ich finde, R kann lange dauern, um Diagramme zu erstellen, wenn Millionen von Punkten vorhanden sind - nicht überraschend, da die Punkte einzeln dargestellt werden. Darüber hinaus sind solche Diagramme häufig zu unübersichtlich und dicht, um nützlich zu sein. Viele der Punkte überlappen sich und bilden eine schwarze Masse, und es wird viel Zeit darauf verwendet, mehr Punkte in diese Masse zu zeichnen.
Gibt es statistische Alternativen zur Darstellung von großen Daten in einem Standardstreudiagramm? Ich habe über eine Dichtekurve nachgedacht, aber welche anderen Alternativen gibt es?
r
data-visualization
Alex Stoddard
quelle
quelle
Antworten:
Dies ist eine schwierige Aufgabe ohne fertige Lösungen (dies ist natürlich deshalb so verlockend, weil die Dichtekurve so verlockend ist, als es niemanden wirklich interessiert). Also was kannst du tun?
Wenn sie sich wirklich überlappen (dh genau die gleichen X- und Y-Koordinaten haben) und Sie kein Alpha verwenden, ist es die beste Idee, die Überlappung mit zu verringern
unique
(bei Alpha kann sie über solche Gruppen summiert werden).Andernfalls können Sie die Koordinaten manuell auf die nächsten Pixel runden und die vorherige Methode verwenden (dies ist jedoch eine fehlerhafte Lösung).
Schließlich können Sie ein Dichtediagramm erstellen, um nur die Punkte in den dichtesten Bereichen zu untertasten. Dies führt andererseits nicht zu genau derselben Darstellung und kann zu Artefakten führen, wenn sie nicht genau abgestimmt sind.
quelle
unique
oder durch Runden kann zu verzerrten (trügerischen) Darstellungen führen. Es ist wichtig, das Ausmaß der Überlappung mithilfe von grafischen Mitteln wie Helligkeit oder Sonnenblumenparzellen anzuzeigen.Schauen Sie sich das Hexbin- Paket an, in dem paper / method von Dan Carr implementiert ist. Die pdf-Vignette enthält weitere Details, die ich unten zitiere:
quelle
smoothScatter {RColorBrewer}
unddensCols {grDevices}
. Ich kann bestätigen, dass es mit Tausenden bis Millionen von Punkten aus genetischen Daten ziemlich gut funktioniert.Ich muss zugeben, dass ich Ihren letzten Absatz nicht ganz verstehe:
Es ist auch unklar, nach welcher Art von Grundstück (Funktion) Sie suchen.
Angesichts der Tatsache, dass Sie metrische Variablen haben, könnten Sie Sechseck-Diagramme oder Sonnenblumen-Diagramme nützlich finden. Weitere Referenzen finden Sie unter
quelle
Eine weitere direkte Antwort auf diese Frage ist das rgl-Paket, das mit OpenGL Millionen von Punkten darstellen kann. Geben Sie außerdem eine Punktgröße an (z. B. 3) und zoomen Sie heraus, um diese Massenschwerpunkte als monolithische Blöcke anzuzeigen, oder zoomen Sie hinein und sehen Sie die Struktur der früheren monolithischen Blöcke - die Punktgrößen sind konstant, aber die Abstände zwischen ihnen auf dem Bildschirm hängen vom zoomen ab. Alpha-Level können ebenfalls verwendet werden.
quelle
Hier ist eine Datei, die ich anrufe
bigplotfix.R
. Wenn Sie es als Quelle angeben, wird ein Wrapper definiert, für denplot.xy
die Plotdaten "komprimiert" werden, wenn sie sehr groß sind. Der Wrapper macht nichts, wenn die Eingabe klein ist, aber wenn die Eingabe groß ist, dann zerlegt er sie in Blöcke und zeichnet nur den maximalen und minimalen x- und y-Wert für jeden Block. Die Beschaffung wirdbigplotfix.R
auch erneut gebundengraphics::plot.xy
, um auf den Wrapper zu verweisen (die mehrfache Beschaffung ist in Ordnung).Beachten Sie, dass
plot.xy
die „Arbeitspferd“ -Funktion für die Standard - Plotten Methoden wie istplot()
,lines()
undpoints()
. So können Sie diese Funktionen in Ihrem Code unverändert weiterverwenden, und Ihre großen Zeichnungen werden automatisch komprimiert.Dies ist eine Beispielausgabe. Es ist im Wesentlichen
plot(runif(1e5))
mit Punkten und Linien und mit und ohne die hier implementierte "Komprimierung". In der Darstellung "Komprimierte Punkte" fehlt der mittlere Bereich aufgrund der Art der Komprimierung, aber die Darstellung "Komprimierte Linien" ähnelt dem unkomprimierten Original viel eher. Die Zeiten gelten für daspng()
Gerät; Aus irgendeinem Grund sind die Punkte impng
Gerät viel schneller als imX11
Gerät, aber die BeschleunigungenX11
sind vergleichbar (X11(type="cairo")
waren langsamer alsX11(type="Xlib")
in meinen Experimenten).Der Grund, warum ich das geschrieben habe, ist, dass ich es leid war,
plot()
versehentlich auf einem großen Datensatz (z. B. einer WAV-Datei) zu rennen . In solchen Fällen müsste ich wählen, ob ich mehrere Minuten warten möchte, bis der Plot beendet ist, oder ob ich meine R-Sitzung mit einem Signal beenden möchte (wodurch meine aktuelle Befehlsgeschichte und Variablen verloren gehen). Wenn ich jetzt daran denke, diese Datei vor jeder Sitzung zu laden, kann ich in diesen Fällen tatsächlich einen nützlichen Plot erhalten. Eine kleine Warnmeldung zeigt an, wann die Plotdaten "komprimiert" wurden.quelle
Vielleicht werde ich für meine Methode gemieden, schlechte Erinnerungen an einen meiner Forschungsprofis, die Leute anschreien, weil sie gute Daten weggeworfen haben, indem sie sie in Kategorien übersetzt haben (natürlich stimme ich jetzt ein paar Tage zu lol), wissen es nicht. Egal, wenn Sie von einem Streudiagramm sprechen, dann hatte ich die gleichen Probleme. Wenn ich numerische Daten habe, ist es für mich nicht sinnvoll, sie für die Analyse zu kategorisieren. Visualisieren ist eine andere Geschichte. Ich habe festgestellt, dass es für mich am besten ist, zuerst (1) Ihre unabhängige Variable mithilfe der Ausschneidefunktion in Gruppen aufzuteilen. Sie können mit der Anzahl der Gruppen herumspielen und dann (2) einfach den DV gegen die Schnittversion des IV plotten. R erzeugt Boxplots anstelle dieses widerlichen Scatterplots. Ich empfehle, die Ausreißer aus dem Plot zu entfernen (verwenden Sie die Option outline = FALSE im Befehl plot). Auch hier würde ich NIEMALS perfekte numerische Daten durch Kategorisieren und anschließendes Analysieren verschwenden. Zu viele Probleme dabei. Obwohl ich weiß, dass dies ein heikles Thema ist. Aber dies speziell für das Ziel, zumindest einen visuellen Sinn aus den Daten zu ziehen, nicht viel Schaden, den ich daraus gesehen habe. Ich habe Daten bis zu einer Größe von 10 MB aufgezeichnet und es dennoch geschafft, mit dieser Methode einen Sinn daraus zu machen. Hoffentlich hilft das! Freundliche Grüße! habe es gesehen. Ich habe Daten bis zu einer Größe von 10 MB aufgezeichnet und es dennoch geschafft, mit dieser Methode einen Sinn daraus zu machen. Hoffentlich hilft das! Freundliche Grüße! habe es gesehen. Ich habe Daten bis zu einer Größe von 10 MB aufgezeichnet und es dennoch geschafft, mit dieser Methode einen Sinn daraus zu machen. Hoffentlich hilft das! Freundliche Grüße!
quelle
Für große Zeitreihen habe ich mich für smoothScatter (nicht weniger Teil der Basis R) entschieden. Ich muss oft einige zusätzliche Daten angeben, und das Beibehalten der grundlegenden Plot-API ist sehr hilfreich, zum Beispiel:
Was gibt Ihnen (wenn Sie das Design verzeihen):
Es ist immer verfügbar und funktioniert gut mit riesigen Datenmengen. Es ist also nett, zumindest einen Blick auf das zu werfen, was Sie haben.
quelle