Am wenigsten genutzte Datenvisualisierung [geschlossen]

178

Histogramme und Streudiagramme sind großartige Methoden zur Visualisierung von Daten und der Beziehung zwischen Variablen, aber in letzter Zeit habe ich mich gefragt, welche Visualisierungstechniken mir fehlen. Was ist Ihrer Meinung nach die am wenigsten genutzte Art von Handlung?

Antworten sollten:

  1. In der Praxis nicht sehr häufig verwendet werden.
  2. Seien Sie verständlich ohne viel Hintergrunddiskussion.
  3. Seien Sie in vielen gängigen Situationen anwendbar.
  4. Fügen Sie reproduzierbaren Code ein, um ein Beispiel zu erstellen (vorzugsweise in R). Ein verlinktes Bild wäre schön.
Ian Fellows
quelle
13
Ich denke, dies ist eine sehr nützliche Diskussion und bin traurig, dass sie geschlossen ist.
Alex Brown
2
@AlexBrown: Warum nicht für die Wiedereröffnung stimmen? Ich kann sehen, warum sich der Wortlaut dieser Frage als "nicht konstruktiv" anfühlt, aber diese Frage führte zu einigen der nachdenklichsten und aufschlussreichsten Antworten zu diesem Thema im Internet. Ich würde gerne sehen, wie diese Antworten aktualisiert und erweitert werden.
Max
2
Dies sollte wahrscheinlich nach stats.stackoverflow.com verschoben werden. Es ist viel besser für diese Seite geeignet.
naught101
4
Schade, dass hier niemand QQ-Plots erwähnt hat, bevor dies geschlossen wurde. Sie sind so verdammt nützlich!
naught101
Dies sollte wieder geöffnet werden.
Peter Flom

Antworten:

89

Ich stimme den anderen Postern wirklich zu: Tuftes Bücher sind fantastisch und lesenswert.

Zunächst möchte ich Sie auf ein sehr schönes Tutorial zu ggplot2 und ggobi aus "Looking at Data" Anfang dieses Jahres verweisen . Darüber hinaus möchte ich nur eine Visualisierung aus R und zwei Grafikpakete hervorheben (die nicht so häufig verwendet werden wie Basisgrafiken, Gitter oder ggplot):

Heatmaps

Ich mag Visualisierungen, die multivariate Daten verarbeiten können, insbesondere Zeitreihendaten. Wärmekarten können hierfür hilfreich sein. Eine wirklich nette wurde von David Smith im Revolutions-Blog vorgestellt . Hier ist der ggplot-Code mit freundlicher Genehmigung von Hadley:

stock <- "MSFT"
start.date <- "2006-01-12"
end.date <- Sys.Date()
quote <- paste("http://ichart.finance.yahoo.com/table.csv?s=",
                stock, "&a=", substr(start.date,6,7),
                "&b=", substr(start.date, 9, 10),
                "&c=", substr(start.date, 1,4), 
                "&d=", substr(end.date,6,7),
                "&e=", substr(end.date, 9, 10),
                "&f=", substr(end.date, 1,4),
                "&g=d&ignore=.csv", sep="")    
stock.data <- read.csv(quote, as.is=TRUE)
stock.data <- transform(stock.data,
  week = as.POSIXlt(Date)$yday %/% 7 + 1,
  wday = as.POSIXlt(Date)$wday,
  year = as.POSIXlt(Date)$year + 1900)

library(ggplot2)
ggplot(stock.data, aes(week, wday, fill = Adj.Close)) + 
  geom_tile(colour = "white") + 
  scale_fill_gradientn(colours = c("#D61818","#FFAE63","#FFFFBD","#B5E384")) + 
  facet_wrap(~ year, ncol = 1)

Was am Ende ungefähr so ​​aussieht:

Alt-Text

RGL: Interaktive 3D-Grafik

Ein weiteres Paket, dessen Erlernen sich lohnt, ist RGL , mit dem auf einfache Weise interaktive 3D-Grafiken erstellt werden können. Hierfür sind viele Beispiele online (einschließlich in der rgl-Dokumentation).

Das R-Wiki bietet ein schönes Beispiel für das Zeichnen von 3D-Streudiagrammen mit rgl.

GGobi

Ein weiteres wissenswertes Paket ist rggobi . Es gibt ein Springer-Buch zu diesem Thema und viele großartige Online-Dokumentationen / Beispiele, einschließlich des Kurses "Looking at Data" .

Shane
quelle
nett. Vielen Dank für die Eingabe des Codes / Bildes.
Ian Fellows
Was wird durch die vertikale Position des 'Z' oder der Biegung in jeder durchgezogenen schwarzen vertikalen Linie angezeigt?
Doug
Dies sind Monatsgrenzen (Monate enden nicht am selben Tag).
Shane
3
Das ist schön. Wie haben Sie die Monatsgrenzen erreicht?
Alex Brown
58

Ich mag Dotplots sehr und finde, wenn ich sie anderen wegen entsprechender Datenprobleme empfehle, sind sie ausnahmslos überrascht und erfreut. Sie scheinen nicht viel zu gebrauchen, und ich kann nicht herausfinden, warum.

Hier ist ein Beispiel von Quick-R: Punktdiagramm auf Fahrzeugdaten

Ich glaube, Cleveland ist am meisten für die Entwicklung und Verbreitung dieser Daten verantwortlich, und das Beispiel in seinem Buch (in dem fehlerhafte Daten mit einem Punktdiagramm leicht erkannt wurden) ist ein schlagkräftiges Argument für ihre Verwendung. Beachten Sie, dass im obigen Beispiel nur ein Punkt pro Zeile eingefügt wird, während die tatsächliche Leistung darin besteht, dass Sie mehrere Punkte in jeder Zeile haben, wobei eine Legende erklärt, welcher welcher ist. Zum Beispiel könnten Sie verschiedene Symbole oder Farben für drei verschiedene Zeitpunkte verwenden und so leicht ein Gefühl für Zeitmuster in verschiedenen Kategorien bekommen.

Im folgenden Beispiel (ausgerechnet in Excel!) Können Sie deutlich sehen, welche Kategorie möglicherweise unter einem Etikettentausch gelitten hat.

Dotplot mit 2 Gruppen

Ari B. Friedman
quelle
1
Wie unterscheidet sich ein Punktdiagramm von einem Streudiagramm mit geschalteter Achse, von denen eines kategorisch ist?
DrSAR
4
@DrSAR Wie unterscheidet sich ein Histogramm von einem Balkendiagramm oder ein Dichtediagramm von einem Liniendiagramm? Sie können viele Standarddiagrammtypen mit grundlegenderen Geometrien beschreiben (vgl. Bertins Semiologie Graphique ), aber das macht die Einsicht, etwas auf eine bestimmte Weise zu zeichnen, nicht weniger einzigartig. In diesem Fall zeichnen Sie zwei kategoriale Informationen (eine vertikal, eine nach der Form des Zeichenzeichens) gegen eine fortlaufende Datenerfassung. Während Sie in den meisten Softwarepaketen ein Streudiagramm hacken würden, um es zu erstellen, handelt es sich nachdrücklich nicht um ein Streudiagramm.
Ari B. Friedman
2
@ gsk3 Wollte nicht snarky klingen. Tatsächlich erkenne ich jetzt (nachdem ich mehr über die Grammatik von Grafiken und ähnlichen Werken gelesen habe), dass diese Unterscheidung auf höherer Ebene für die Präsentation sehr wichtig sein kann. Danke, dass du das gezeigt hast.
DrSAR
@ DrSAR Und ich wollte nicht defensiv klingen. Art der SO Kommentare denke ich ;-)
Ari B. Friedman
56

Diagramme mit Polarkoordinaten werden sicherlich nicht ausreichend genutzt - manche würden dies aus gutem Grund sagen. Ich denke, die Situationen, die ihre Verwendung rechtfertigen, sind nicht häufig. Ich denke auch, dass in solchen Situationen Polardiagramme Muster in Daten aufdecken können, die lineare Diagramme nicht können.

Ich denke, das liegt daran, dass Ihre Daten manchmal eher von Natur aus polar als linear sind - z. B. zyklisch (x-Koordinaten, die Zeiten während eines 24-Stunden-Tages über mehrere Tage darstellen) oder die Daten zuvor auf einen polaren Merkmalsraum abgebildet wurden.

Hier ist ein Beispiel. Dieses Diagramm zeigt das durchschnittliche Verkehrsaufkommen einer Website pro Stunde. Beachten Sie die beiden Spitzen um 22 Uhr und um 1 Uhr. Für die Netzwerktechniker der Site sind diese von Bedeutung. Es ist auch wichtig, dass sie nahe beieinander auftreten (nur zwei Stunden voneinander entfernt). Wenn Sie jedoch dieselben Daten in einem herkömmlichen Koordinatensystem darstellen, wird dieses Muster vollständig ausgeblendet - linear dargestellt, sind diese beiden Spitzen 20 Stunden voneinander entfernt, obwohl sie an aufeinanderfolgenden Tagen auch nur zwei Stunden voneinander entfernt sind. Das Polardiagramm oben zeigt dies auf sparsame und intuitive Weise (eine Legende ist nicht erforderlich).

Polarkarte mit dem Standortverkehr mit Spitzenwerten in den Stunden 1 und 22

Es gibt zwei Möglichkeiten (die mir bekannt sind), solche Diagramme mit R zu erstellen (ich habe das Diagramm über w / R erstellt). Eine besteht darin, Ihre eigene Funktion entweder im Basis- oder im Rastergrafiksystem zu codieren. Die andere Möglichkeit, die einfacher ist, besteht darin, das Rundpaket zu verwenden . Die Funktion, die Sie verwenden würden, ist ' rose.diag ':

data = c(35, 78, 34, 25, 21, 17, 22, 19, 25, 18, 25, 21, 16, 20, 26, 
                 19, 24, 18, 23, 25, 24, 25, 71, 27)
three_palettes = c(brewer.pal(12, "Set3"), brewer.pal(8, "Accent"), 
                   brewer.pal(9, "Set1"))
rose.diag(data, bins=24, main="Daily Site Traffic by Hour", col=three_palettes)
Doug
quelle
4
Wenn ich Ihren Code kopiere, bekomme ich eine ganz andere Handlung (das ist ziemlich hässlich); Irgendeine Idee warum? Ich erhalte die folgende Warnung: 1: In as.circular (xx [, 1]): Ein Objekt wird mit dem Standardwert für die folgenden Komponenten in die Klasse 'rund' gezwungen: Typ: 'Winkel' Einheiten: 'Bogenmaß' Vorlage: ' keine 'modulo:' asis 'null: 0 Drehung:' counter 'rose.diagdata24Daily Site Traffic von Hourthree_palettes
datayoda
Ich habe das gleiche Problem.
Crayola
Sie können dies auch mit einem Liniendiagramm tun. Kann etwas schwieriger zu lesen sein, aber es kann auch für detailliertere Daten oder Daten, die mehr als einen Zyklus durchlaufen, sehr beeindruckend sein (z. B. zehn Zyklen zeichnen und dann ihren Durchschnitt zeichnen).
Naught101
1
Ich hatte auch Probleme, die Handlung zu replizieren. Ich entschied schließlich, dass es einfacher war, ggplot2 zu verwenden. Ich habe eine kurze Demo auf Rpubs mit Code und Ergebnissen hinterlassen
MattBagg
1
ggplot2 Äquivalent:qplot(y=data, x=1:length(data), fill=factor(1:length(data)), stat='identity', geom='bar') + coord_polar()
naught101
54

Wenn Ihr Streudiagramm so viele Punkte enthält, dass es zu einem völligen Durcheinander kommt, versuchen Sie es mit einem geglätteten Streudiagramm. Hier ist ein Beispiel:

library(mlbench) ## this package has a smiley function
n <- 1e5 ## number of points
p <- mlbench.smiley(n,sd1 = 0.4, sd2 = 0.4) ## make a smiley :-)
x <- p$x[,1]; y <- p$x[,2]
par(mfrow = c(1,2)) ## plot side by side
plot(x,y) ## left plot, regular scatter plot
smoothScatter(x,y) ## right plot, smoothed scatter plot

Das hexbinPaket (vorgeschlagen von @Dirk Eddelbuettel) wird für den gleichen Zweck verwendet, smoothScatter()hat jedoch den Vorteil, dass es zum graphicsPaket gehört und somit Teil der Standard-R-Installation ist.

Smiley als reguläres oder geglättetes Streudiagramm

nullglob
quelle
6
Der Vollständigkeit halber können Sie diesen Effekt auch in ggplot erzielen, indem Sie Transparenz (Alpha).) In Kombination mit Geom Point verwenden.
Paul Hiemstra
1
Ist dies dasselbe wie die Schätzung der Kerneldichte oder nur ähnlich?
Endolith
30

In Bezug auf Sparkline und andere Tufte-Ideen bietet das YaleToolkit- Paket auf CRAN Funktionen sparklineund sparklines.

Ein weiteres Paket, das für größere Datensätze nützlich ist, ist hexbin, da es Daten geschickt in Buckets " bündelt ", um mit Datensätzen umzugehen, die für naive Streudiagramme möglicherweise zu groß sind.

Dirk Eddelbuettel
quelle
4
+1 zu den Sparklines. Ich arbeite derzeit an einem Paket, das sich auf die Erstellung von Sparklines in R konzentriert. Sie ergänzen Tabellen in Sweave-Berichten hervorragend.
Sharpie
1
Cool! Ich bin nicht sehr glücklich mit dem, was Jay in YaleToolkit hat und würde gerne Sparklines in Tabellen haben!
Dirk Eddelbuettel
Ich habe gerade einen Weg dokumentiert, Sparklines nur mit plotover in einem Update meiner Frage zu erzeugen , mit Hilfe dieses Tufte-Forumsbeitrags
Ben
1
Die Hmisc::latex()Ausgabeversion von Hmisc::describeenthält ein Mini-Histogramm, das in die Tabelle aufgenommen wird.
IRTFM
28

Violin-Plots (die Box-Plots mit Kernel-Dichte kombinieren) sind relativ exotisch und ziemlich cool. Mit dem Vioplot- Paket in R können Sie sie ganz einfach erstellen .

Hier ist ein Beispiel (Der Wikipedia-Link zeigt auch ein Beispiel):

Geben Sie hier die Bildbeschreibung ein

Jason Sundram
quelle
3
Geigen-Plots sind auch über das Gitterpaket erhältlich:bwplot(... panel = panel.violin)
David J.
3
ggplot2-Version von Geigenplots in Kürze. github.com/wch/ggplot2/wiki/geom_violin
Roman Luštrik
Ich denke nicht, dass dünne Geigenplots so nützlich sind, ich zeige stattdessen gerne alle Punkte mit einem Jitter.
Nakx
25

Eine weitere schöne Zeitreihenvisualisierung, die ich gerade überprüft habe, ist das "Bump Chart" (wie in diesem Beitrag im "Learning R" -Blog vorgestellt ). Dies ist sehr nützlich, um Positionsänderungen im Laufe der Zeit zu visualisieren.

Informationen zum Erstellen finden Sie unter http://learnr.wordpress.com/. Am Ende sieht es jedoch so aus:

Alt-Text

Shane
quelle
Ich mag das Bump-Diagramm für diese bestimmten Daten, aber es fällt mir schwer, an allgemeinere Situationen zu denken, in denen es von Nutzen wäre. Trotzdem denke ich, dass wir uns alle einig sein können, dass der Learning R-Blog die Socken rockt.
Ian Fellows
7
Ein Bump-Diagramm ist ein paralleles Koordinatendiagramm von Rangdaten.
Hadley
1
Dies erinnert mich an Slopegraph, der gut für die Darstellung von Rangänderungen im Laufe der Zeit oder für Beziehungen zwischen Ranglisten geeignet ist
topchef
21

Ich mag auch Tuftes Modifikationen von Boxplots, mit denen Sie kleine Vielfache viel einfacher vergleichen können, da sie horizontal sehr "dünn" sind und die Handlung nicht mit redundanter Tinte überladen. Es funktioniert jedoch am besten mit einer relativ großen Anzahl von Kategorien. Wenn Sie nur wenige auf einem Grundstück haben, sehen die regulären (Tukey) Boxplots besser aus, da sie etwas schwerer sind.

library(lattice)
library(taRifx)
compareplot(~weight | Diet * Time * Chick, 
  data.frame=cw , 
  main = "Chick Weights",
  box.show.mean=FALSE,
  box.show.whiskers=FALSE,
  box.show.box=FALSE
  )

Vergleichsplot

Andere Möglichkeiten, diese zu erstellen (einschließlich der anderen Art von Tufte-Boxplot), werden in dieser Frage erörtert .

Ari B. Friedman
quelle
@ Daroczig Danke. Eines Tages werde ich es umschreiben, um verschiedene Konfigurationen von Gruppierungen vorzunehmen. Ich habe viel gelernt, seit ich diese Funktion geschrieben habe!
Ari B. Friedman
1
Ich mag deine Handlungen viel besser als die von Tufte, die lächerlich schwer zu lesen sind. Ich denke immer noch, dass Boxplots im Tukey-Stil besser sind, obwohl ein guter Kompromiss so etwas wie das sein könnte, was Sie hier haben, aber mit 3 Pixel breiten Linien für die Box anstelle des 1 Pixel Versatzes. Und ich denke, eine 1px breite horizontale Linie für den Median ist wahrscheinlich ordentlicher und genauer.
naught101
19

Wir sollten die niedliche und (historisch) wichtige Stamm-Blatt-Handlung nicht vergessen (die Tufte auch liebt!). Sie erhalten eine direkt numerische Übersicht über Ihre Datendichte und -form (natürlich, wenn Ihr Datensatz nicht größer als etwa 200 Punkte ist). In R stemerzeugt die Funktion Ihre Stamm- und Blattanzeige (im Arbeitsbereich). Ich bevorzuge die gstemFunktion aus dem Paket fmsb, um es direkt in ein Grafikgerät zu zeichnen. Unten sehen Sie eine Abweichung der Biberkörpertemperatur (Daten sollten sich in Ihrem Standarddatensatz befinden) in einer blattweisen Anzeige:

  require(fmsb)
  gstem(beaver1$temp)

Geben Sie hier die Bildbeschreibung ein

Geek On Acid
quelle
15

Neben Tuftes hervorragender Arbeit empfehle ich die Bücher von William S. Cleveland: Visualisierung von Daten und die Elemente der grafischen Darstellung von Daten . Sie sind nicht nur exzellent, sondern wurden alle in R erstellt, und ich glaube, der Code ist öffentlich verfügbar.

Peter Flom
quelle
14

Boxplots! Beispiel aus der R-Hilfe:

boxplot(count ~ spray, data = InsectSprays, col = "lightgray")

Meiner Meinung nach ist es die praktischste Möglichkeit, einen kurzen Blick auf die Daten zu werfen oder Verteilungen zu vergleichen. Für komplexere Distributionen gibt es eine Erweiterung namens vioplot.

mbq
quelle
2
Beanplot könnte auch hier erwähnt werden jstatsoft.org/v28/c01/paper und cran.r-project.org/web/packages/beanplot/index.html
Radek
Boxplots werden nicht so wenig genutzt, oder? Ich meine sicher, in vielen Zeitungen werden Balkendiagramme für Daten verwendet, die in Boxplots dargestellt werden sollten, aber sie sind immer noch ziemlich häufig.
naught101
11

Mosaikplots scheinen mir alle vier genannten Kriterien zu erfüllen. Es gibt Beispiele in r unter Mosaikplot.

Peter Flom
quelle
3
Eine bessere Implementierung von Mosaikplots finden Sie in der VCD-Bibliothek (Funktionsname 'Mosaik'). Es hat eine viel flexiblere Methodensignatur und ist im Raster implementiert (und nicht im Basisgrafiksystem).
Doug
10

Schauen Sie sich Edward Tuftes Arbeit an und besonders dieses Buch an

Sie können auch versuchen, zu fangen seine Reisepräsentation zu . Es ist ziemlich gut und enthält ein Bündel von vier seiner Bücher. (Ich schwöre, ich besitze nicht die Aktien seines Verlags!)

Übrigens mag ich seine Sparkline-Datenvisualisierungstechnik. Überraschung! Google hat es bereits geschrieben und in Google Code veröffentlicht

Paul Sasik
quelle