Diagramm für die Beziehung zwischen zwei Ordnungsvariablen

46

Was ist ein geeignetes Diagramm, um die Beziehung zwischen zwei Ordnungsvariablen zu veranschaulichen?

Ein paar Möglichkeiten, die mir einfallen:

  1. Streudiagramm mit zufälligem Jitter, um zu verhindern, dass sich Punkte gegenseitig verbergen. Anscheinend eine Standardgrafik - Minitab nennt dies ein "Einzelwertdiagramm". Meiner Meinung nach kann dies irreführend sein, da es visuell eine Art lineare Interpolation zwischen Ordnungswerten fördert, als ob die Daten von einer Intervallskala stammen würden.
  2. Das Streudiagramm wurde so angepasst, dass die Größe (Fläche) des Punkts die Häufigkeit dieser Kombination von Ebenen darstellt, anstatt einen Punkt für jede Abtasteinheit zu zeichnen. Ich habe solche Pläne gelegentlich in der Praxis gesehen. Sie können schwer zu lesen sein, aber die Punkte liegen auf einem Gitter mit regelmäßigen Abständen, was die Kritik des Diagramms mit zitternden Streuungen, das die Daten visuell "intervallisiert", ein wenig überwindet.
  3. Insbesondere wenn eine der Variablen als abhängig behandelt wird, wird ein Boxplot nach den Ebenen der unabhängigen Variablen gruppiert. Sieht wahrscheinlich furchtbar aus, wenn die Anzahl der Stufen der abhängigen Variablen nicht hoch genug ist (sehr "flach" mit fehlenden Whiskern oder noch schlimmer kollabierten Quartilen, was die visuelle Identifizierung des Medians unmöglich macht), lenkt aber zumindest die Aufmerksamkeit auf den Median und die Quartile, die es gibt relevante deskriptive Statistik für eine Ordinalvariable.
  4. Wertetabelle oder leeres Zellenraster mit Wärmekarte zur Angabe der Häufigkeit. Optisch anders, aber konzeptionell dem Streudiagramm ähnlich, wobei die Punktfläche die Frequenz anzeigt.

Gibt es andere Ideen oder Überlegungen, welche Handlungen vorzuziehen sind? Gibt es Forschungsbereiche, in denen bestimmte Ordinal-gegen-Ordinal-Diagramme als Standard gelten? (Ich scheine mich an eine Frequenz-Heatmap zu erinnern, die in der Genomik weit verbreitet ist, vermute aber, dass dies häufiger für nominal-vs-nominal gilt.) Vorschläge für eine gute Standardreferenz wären ebenfalls sehr willkommen, ich vermute etwas von Agresti.

Wenn jemand mit einem Plot illustrieren möchte, folgt der R-Code für falsche Beispieldaten.

"Wie wichtig ist Bewegung für dich?" 1 = überhaupt nicht wichtig, 2 = etwas unwichtig, 3 = weder wichtig noch unwichtig, 4 = etwas wichtig, 5 = sehr wichtig.

"Wie oft laufen Sie 10 Minuten oder länger?" 1 = nie, 2 = weniger als einmal pro Woche, 3 = einmal alle ein oder zwei Wochen, 4 = zwei oder drei Mal pro Woche, 5 = vier oder mehr Mal pro Woche.

Wenn es natürlich wäre, "oft" als abhängige Variable und "Wichtigkeit" als unabhängige Variable zu behandeln, wenn ein Plot zwischen beiden unterscheidet.

importance <- rep(1:5, times = c(30, 42, 75, 93, 60))
often <- c(rep(1:5, times = c(15, 07, 04, 03, 01)), #n=30, importance 1
           rep(1:5, times = c(10, 14, 12, 03, 03)), #n=42, importance 2
           rep(1:5, times = c(12, 23, 20, 13, 07)), #n=75, importance 3
           rep(1:5, times = c(16, 14, 20, 30, 13)), #n=93, importance 4
           rep(1:5, times = c(12, 06, 11, 17, 14))) #n=60, importance 5
running.df <- data.frame(importance, often)
cor.test(often, importance, method = "kendall") #positive concordance
plot(running.df) #currently useless

Eine verwandte Frage für stetige Variablen fand ich hilfreich, vielleicht ein nützlicher Ausgangspunkt: Was sind Alternativen zu Streudiagrammen, wenn man die Beziehung zwischen zwei numerischen Variablen untersucht?

Silverfish
quelle
1
Was ist mit einem Spineplot?
Dimitriy V. Masterov
Eine verwandte Frage zum Anzeigen von univariaten Ordnungsdaten über mehrere Gruppen hinweg kann ebenfalls relevant sein: Anzeigen von Ordnungsdaten - Mittelwerte, Mediane und mittlere Ränge
Silverfish

Antworten:

15

Ein Wirbelsäulenplot (Mosaikplot) eignet sich gut für die Beispieldaten, kann jedoch schwierig zu lesen oder zu interpretieren sein, wenn einige Kombinationen von Kategorien selten sind oder nicht existieren. Natürlich ist es vernünftig und zu erwarten, dass eine niedrige Frequenz durch eine kleine Kachel und eine Null durch keine Kachel repräsentiert wird, aber die psychologischen Schwierigkeiten können bestehen bleiben. Es ist auch natürlich, dass Leute, die Spineplots mögen, Beispiele auswählen, die gut für ihre Artikel oder Präsentationen geeignet sind, aber ich habe oft Beispiele hervorgebracht, die zu chaotisch waren, um sie in der Öffentlichkeit zu verwenden. Umgekehrt nutzt ein Spineplot den verfügbaren Platz gut aus.

Einige Implementierungen setzen interaktive Grafiken voraus, sodass der Benutzer jede Kachel abfragen kann, um mehr darüber zu erfahren.

Eine Alternative, die auch gut funktionieren kann, ist ein Zwei-Wege-Balkendiagramm (es gibt viele andere Namen).

Siehe zum Beispiel tabplotinnerhalb http://www.surveydesign.com.au/tipsusergraphs.html

Für diese Daten ist ein möglicher Plot (erstellt mit tabplotStata, sollte aber in jeder anständigen Software einfach sein)

Bildbeschreibung hier eingeben

Das Format bedeutet, dass es einfach ist, einzelne Balken mit Zeilen- und Spaltenkennungen zu verknüpfen und mit Häufigkeiten, Proportionen oder Prozenten zu versehen (tun Sie dies natürlich nicht, wenn Sie der Meinung sind, dass das Ergebnis zu beschäftigt ist).

Einige Möglichkeiten:

  1. Wenn eine Variable als Prädiktor für eine Antwort auf eine andere angesehen werden kann, sollte sie wie gewohnt auf der vertikalen Achse aufgetragen werden. Hier betrachte ich "Wichtigkeit" als Messung einer Haltung, die Frage ist dann, ob sie das Verhalten beeinflusst ("oft"). Das kausale Problem ist selbst für diese imaginären Daten oft komplizierter, aber der Punkt bleibt.

  2. Vorschlag Nr. 1 ist immer zu übertreffen, wenn das Gegenteil besser funktioniert, das heißt, es ist einfacher, darüber nachzudenken und zu interpretieren.

  3. Prozentuale oder wahrscheinlichkeitsbezogene Ausfälle sind oft sinnvoll. Eine Darstellung der Rohfrequenzen kann ebenfalls nützlich sein. (Natürlich fehlt dieser Darstellung die Tugend von Mosaikzeichnungen, beide Arten von Informationen gleichzeitig anzuzeigen.)

  4. Sie können natürlich auch die (viel häufigeren) Alternativen von gruppierten Balkendiagrammen oder gestapelten Balkendiagrammen (oder die noch recht seltenen gruppierten Punktdiagramme im Sinne von WS Cleveland) ausprobieren. In diesem Fall denke ich, dass sie nicht so gut funktionieren, aber manchmal funktionieren sie besser.

  5. Einige möchten möglicherweise unterschiedliche Antwortkategorien unterschiedlich färben. Ich habe keine Einwände, und wenn Sie das wollen, würden Sie Einwände in keiner Weise ernst nehmen.

Die Strategie, Diagramm und Tabelle zu hybridisieren, kann allgemeiner oder gar nicht sinnvoll sein. Ein oft wiederholtes Argument ist, dass die Trennung von Abbildungen und Tabellen nur ein Nebeneffekt der Erfindung des Drucks und der damit verbundenen Arbeitsteilung war. es ist wieder unnötig, genauso wie es für Manuskriptautoren war, Illustrationen genau so zu platzieren, wie und wo sie es mochten.

Nick Cox
quelle
Vielen Dank für das Hinzufügen der Grafik. Dies wirft die Frage auf, wie Grafik- und Textdaten kombiniert werden - ich weiß, dass einige Leute es nicht mögen, Zahlen auf Balken zu setzen (weil die Balken dadurch größer erscheinen als sie wirklich sind; ich habe kein Zitat zur Hand) dies aber ich denke es ist eine bekannte meinung).
Silverfish
Andererseits scheint das Fixieren der Position der Zahlen eines von zwei Problemen zu verursachen: Entweder können die Zahlen über die Balken gelegt werden, wodurch sie verdeckt werden, oder das Fixieren der Zahlen über den Balken kann sie von den unteren Balken "trennen" speziell. Gibt es irgendwo eine gute Diskussion über diese Themen?
Silverfish
Ich glaube nicht, dass Sie eine Referenz brauchen. Es ist eine gemeinsame Haltung. Ich sehe andere Varianten: (1) Anzeigespezifische Vorschläge, dass das Display einfach zu voll, unordentlich usw. ist. (2) Der Gedanke, dass der numerische Text überflüssig ist, wird angesprochen, weil dieselben Informationen implizit sind (oder laut einigen expliziten) ) in der Grafik in irgendeiner Weise (3) eine "Jungen tragen Blau und Mädchen tragen Rosa" Haltung, dass Figuren Figuren und Tabellen Tabellen sind, und nie die Twain treffen soll. (3) erscheint mir als reines Vorurteil; (2) ist prinzipiell richtig, aber dennoch können Zahlen helfen, (1) muss exemplarisch durchdacht werden.
Nick Cox
Ich kenne keine Diskussionen über die spezifischen Kompromisse. Es ist oft eine gute Idee, Balken farblos zu lassen, damit Zahlen darin platziert werden können. Manchmal können Balken zu klein sein, um dies immer zu tun.
Nick Cox
30

Hier ist ein kurzer Versuch einer Heatmap . Ich habe schwarze Zellränder verwendet, um die Zellen aufzubrechen, aber vielleicht sollten die Kacheln mehr wie in Glen_bs Antwort getrennt werden.

Heatmap

library(ggplot2)
runningcounts.df <- as.data.frame(table(importance, often))
ggplot(runningcounts.df, aes(importance, often)) +
   geom_tile(aes(fill = Freq), colour = "black") +
   scale_fill_gradient(low = "white", high = "steelblue")

Hier ist ein Fluktuationsdiagramm, das auf einem früheren Kommentar von Andy W. basiert. Wie er sie beschreibt, "handelt es sich im Grunde genommen nur um gruppierte Streudiagramme für kategoriale Daten, und die Größe eines Punkts wird der Anzahl der Beobachtungen zugeordnet, die in diesen Bereich fallen." Eine Referenz finden Sie unter

Wickham, Hadley und Heike Hofmann. 2011. Produktgrundstücke . IEEE-Transaktionen zu Visualisierung und Computergrafik (Proc. Infovis `11) . PDF vorab drucken

Fluktuationsdiagramm

theme_nogrid <- function (base_size = 12, base_family = "") {
  theme_bw(base_size = base_size, base_family = base_family) %+replace% 
    theme(panel.grid = element_blank())   
}

ggplot(runningcounts.df, aes(importance, often)) +
  geom_point(aes(size = Freq, color = Freq, stat = "identity", position = "identity"), shape = 15) +
  scale_size_continuous(range = c(3,15)) + 
  scale_color_gradient(low = "white", high = "black") +
  theme_nogrid()
Silverfish
quelle
1
" Vielleicht sollten die Kacheln mehr getrennt werden als in Glen_bs Antwort. " - Ich bin mir nicht sicher, ob dies in diesem Fall notwendig ist. Es ist viel weniger verlockend, die Kategorien hier als fortlaufend zu betrachten.
Glen_b
18

Hier ist ein Beispiel, wie ein Spineplot der Daten aussehen würde. Ich habe das in Stata ziemlich schnell gemacht, aber es gibt eine R-Implementierung . Ich denke in R sollte es nur sein:

spineplot(factor(often)~factor(importance))

Das Spineplot scheint tatsächlich die Standardeinstellung zu sein, wenn Sie R kategoriale Variablen angeben:

plot(factor(often)~factor(importance))

Für jede Kategorie von Bedeutung wird die gebrochene Aufteilung der Kategorien von oft angezeigt. Gestapelte Balken werden mit einer vertikalen Abmessung gezeichnet, die den Bruchteil der häufig angegebenen Wichtigkeitskategorie anzeigt. Die horizontale Dimension zeigt den Bruch in jeder Wichtigkeitskategorie. Somit repräsentieren die Flächen der gebildeten Kacheln die Häufigkeiten oder allgemeiner die Gesamtsummen für jede Kreuzkombination von Bedeutung und häufig.

Bildbeschreibung hier eingeben

Dimitriy V. Masterov
quelle
1
Ich habe es geändert.
Dimitriy V. Masterov
1
Zitat Nick Cox (der Autor von Stata's Spineplot): Die Beschränkung auf zwei Variablen ist offensichtlicher als real. Zusammengesetzte Variablen können durch Kreuzkombination von zwei oder mehr kategorialen Variablen erstellt werden. Eine Antwortvariable wird normalerweise besser auf der y-Achse angezeigt. Wenn eine Variable binär ist, ist es oft besser, sie auf der y-Achse zu zeichnen. Natürlich kann zwischen diesen Vorschlägen eine gewisse Spannung bestehen.
Dimitriy V. Masterov
3
Dem stimme ich zu. Das Standard-Farbschema von Stata ist jedoch für ordinale Variablen ziemlich mies. Verschiedene gute Alternativen sind verschiedene Rot- und / oder Blautöne oder einfach nur eine große Auswahl.
Nick Cox
3
@Dimitriy Ich finde es sehr seltsam, eine beliebige Mischung von Farben in der gleichen Situation zu verwenden! Ich impliziere oder leite nichts von den exakten Farben ab, wie quantifiziert sie auch sein mögen. Aber der Punkt ist nur, dass eine abgestufte Skala gut mit einer abgestuften Folge von Farben übereinstimmt. Auch bei der Färbung von Heatmaps und in der Tat bei vielen Arten von thematischen Kartografien gibt es eine gewisse Willkür.
Nick Cox
2
Ich sehe das Problem mit einem abgestuften Farbschema nicht, solange die Farben unterschiedlich sind. Warum sollte jemand versucht sein zu interpolieren? Ich kann keine Logik für beliebige Farben erkennen. Regenbogensequenzen sind in der Physik sinnvoll, aber nicht in Bezug auf die Wahrnehmung von Farben (z. B. Gelb und Rot sind zu unterschiedlich). Ich habe Beweise dafür, wie viele Schüler über ihre Wahlmöglichkeiten sprechen, und ich würde sagen, dass 80% aufrichtig "Das ist viel besser" sagen, wenn sie eine subtile abgestufte Sequenz über Regenbogen oder Obstsalat sehen. Blau bis Hellblau bis Hellrot bis Rot funktionieren gut. Stellen Sie sicher, dass Sie dies sowohl bei Frauen als auch bei Männern ausprobieren.
Nick Cox
13

Die Art und Weise, wie ich das gemacht habe, ist ein bisschen verworren, aber es könnte leicht genug repariert werden.

Dies ist eine modifizierte Version des Jittering-Ansatzes.

Das Entfernen der Achsen verringert die Versuchung, die Skala als stetig zu interpretieren. Das Zeichnen von Kästchen um die zitternden Kombinationen betont, dass es so etwas wie eine "Skalenunterbrechung" gibt - dass die Intervalle nicht unbedingt gleich sind

Idealerweise sollten die 1..5-Bezeichnungen durch die Kategorienamen ersetzt werden, aber das überlasse ich jetzt der Fantasie. Ich denke, es vermittelt den Sinn davon.

 plot(jitter(often)~jitter(importance),data=running.df,bty="n",
    ylim=c(0.5,5.5),xlim=c(0.5,5.5),cex=0.5,pty="s",xaxt="n",yaxt="n") 
 axis(1,tick=TRUE,col=0)
 axis(2,tick=TRUE,col=0)
 rect(rep(seq(0.75,4.75,1),5),rep(seq(0.75,4.75,1),each=5),
       rep(seq(1.25,5.25,1),5),rep(seq(1.25,5.25,1),each=5),
       border=8)

jittered ordinal-ordinal plot


Mögliche Verfeinerungen:

i) die Pausen kleiner machen (ich persönlich bevorzuge größere Pausen) und

ii) Versuch, eine Quasirandom-Sequenz zu verwenden, um das Auftreten eines offensichtlichen Musters innerhalb der Kästchen zu verringern. Obwohl mein Versuch etwas geholfen hat, können Sie feststellen, dass es in den Zellen mit einer geringeren Anzahl von Punkten immer noch Teilsequenzen mit einem mehr oder weniger korrelierten Aussehen gibt (z. B. das Kästchen in der oberen Reihe, 2. Spalte). Um dies zu vermeiden, muss die quasi zufällige Sequenz möglicherweise für jede Unterbox initialisiert werden. (Eine Alternative könnte das Latin-Hypercube-Sampling sein.) Nachdem dies aussortiert wurde, könnte es in eine Funktion eingefügt werden, die genau wie Jitter funktioniert.

quasi zufälliger Jitter und größere Boxen

library("fOptions")

 hjit <- runif.halton(dim(running.df)[1],2) 
 xjit <- (hjit[,1]-.5)*0.8
 yjit <- (hjit[,2]-.5)*0.8  

 plot(I(often+yjit)~I(importance+xjit),data=running.df,bty="n",
    ylim=c(0.5,5.5),xlim=c(0.5,5.5),cex=0.5,pty="s",xaxt="n",yaxt="n") 
 axis(1,tick=TRUE,col=0)
 axis(2,tick=TRUE,col=0)
 rect(rep(seq(0.55,4.55,1),5),rep(seq(0.55,4.55,1),each=5),
       rep(seq(1.45,5.45,1),5),rep(seq(1.45,5.45,1),each=5),
       border=8)
Glen_b
quelle
1
Ich mag das, für mich betont die Trennung wirklich die Ordnungsnatur der Daten! Unglücklicherweise wird das menschliche Auge auf natürliche Weise zu offensichtlichen Mustern beim Zittern hingezogen, z. B. den "Aufwärtstrends" in den Tafeln (4,5) und (5,3). Auf der positiven Seite fühlt sich das "Zählen der Punkte" für mich viel natürlicher an, als die Häufigkeit anhand der Punktgröße zu beurteilen. Gibt es Varianten, bei denen die Punkte gleichmäßig verteilt oder in regelmäßigen Mustern in den Mittelpunkten zusammengefasst sind, um "Jitter-Trends" nicht abzulenken?
Silberfischchen
1
@Silverfish, ein ähnliches Konzept in der Geographie, sind Punktdichte-Karten. Geographen haben Beweise dafür gefunden, dass regelmäßige Muster oder Muster, die eine bestimmte Menge an Leerzeichen ausfüllen (also weiter voneinander entfernt als zufällig), dazu neigen, genauere Wahrnehmungen unter Beobachtern zu erzeugen.
Andy W
IMO das ist eine gute Idee, aber der Abstand zwischen den Panels ist in diesem Beispiel so groß, dass es sehr schwierig ist, einen Trend zu visualisieren. Die Heilung ist schlimmer als die Krankheit (aber es sollte ziemlich einfach sein, die Felder viel enger zusammenzubauen).
Andy W
1
@silverfish quasi-zufälliges Jittering wäre eine mögliche Lösung dafür. Ihre Sorge war eine, die ich selbst hatte.
Glen_b
1
Sehr schön! IMO ist dies eine bessere Option als das Wirbelsäulendiagramm in diesem Fall (Wirbelsäulen- oder Mosaikdiagramme sind besser, um bedingte Verteilungen für jedes Kategorienpaar zu bewerten - dieses Diagramm mit zitternden Punkten ist einfacher, um Trends zu bewerten - unter Ausnutzung der Ordnungsnatur der Daten und unter Annahme einiger Art der monotonen Beziehung).
Andy W
7

Verwenden des Riverplots des R-Pakets:

  data$importance <- factor(data$importance, 
                            labels = c("not at all important",
                                       "somewhat unimportant",
                                       "neither important nor unimportant",
                                       "somewhat important",
                                       "very important"))
  data$often <- factor(data$often, 
                       labels = c("never",
                                  "less than once per fortnight",
                                  "once every one or two weeks",
                                  "two or three times per week",
                                  "four or more times per week"))

  makeRivPlot <- function(data, var1, var2, ...) {

    require(plyr)
    require(riverplot)
    require(RColorBrewer)

    names1 <- levels(data[, var1])
    names2 <- levels(data[, var2])

    var1 <- as.numeric(data[, var1])
    var2 <- as.numeric(data[, var2])

    edges <- data.frame(var1, var2 + max(var1, na.rm = T))
    edges <- count(edges)

    colnames(edges) <- c("N1", "N2", "Value")

    nodes <- data.frame(ID     = c(1:(max(var1, na.rm = T) +
                                      max(var2, na.rm = T))),
                        x      = c(rep(1, times = max(var1, na.rm = T)),
                                   rep(2, times = max(var2, na.rm = T))),
                        labels = c(names1, names2) ,
                        col    = c(brewer.pal(max(var1, na.rm = T), "Set1"),
                                   brewer.pal(max(var2, na.rm = T), "Set1")),
                        stringsAsFactors = FALSE)

    nodes$col <- paste(nodes$col, 95, sep = "")

    return(makeRiver(nodes, edges))

  }

a <- makeRivPlot(data, "importance", "often")

riverplot(a, srt = 45)

Bildbeschreibung hier eingeben

DL Dahly
quelle
1
(+1) Ich mag die Idee, dafür parallele Koordinaten zu verwenden! Ich denke, es wäre einfacher, die Pfade durch das Diagramm zu verfolgen und zu sehen, wie die "oft" -Antworten zerlegt werden, wenn die Farben von links nach rechts fließen (ein Schema, das effektiv "oft" als abhängige Variable anzeigt und " Bedeutung "als erklärende Variable). Bei einigen interaktiven Implementierungen solcher Diagramme können Sie auf eine Achse klicken, um diese Variable einzufärben, was nützlich ist.
Silverfish
1
Zum Vergleich: In Robert Kosaras Visualisierung "Parallel Sets" , die für kategoriale Daten konzipiert ist, fließen die Farben durch das Diagramm.
Silverfish
6

Eine andere Idee, an die ich ursprünglich nicht gedacht hatte, war ein Siebdruck .

Bildbeschreibung hier eingeben

Die Größe jeder Kachel ist proportional zur erwarteten Häufigkeit. Die kleinen Quadrate innerhalb der Rechtecke repräsentieren die tatsächlichen Frequenzen. Daher zeigt eine größere Dichte der Quadrate eine höhere Frequenz als erwartet an (und ist blau schattiert); Eine niedrigere Dichte der Quadrate (rot) steht für eine niedrigere Frequenz als erwartet.

Ich denke, ich würde es vorziehen, wenn die Farbe die Größe und nicht nur das Zeichen des Rests darstellt. Dies gilt insbesondere für Flankenfälle, in denen die erwarteten und beobachteten Frequenzen ähnlich sind und der Rest nahe Null ist. Ein dichotomes Rot / Blau-Schema scheint kleine Abweichungen zu überbetonen.

Implementierung in R:

library(vcd)
runningcounts.df <- as.data.frame(table(importance, often))
sieve(Freq ~ often + importance, data=runningcounts.df, shade= TRUE)
Silberfisch
quelle
1
Unter Berücksichtigung Ihrer Präferenz, dass die Farbe sowohl Größe als auch Zeichen darstellt, besteht eine Möglichkeit darin, die Farben grauer zu gestalten, wenn der Unterschied zu den erwarteten Farben relativ gering ist.
Glen_b
6

Ein facettiertes Balkendiagramm in R. Es zeigt die Verteilung von "oft" auf jeder Ebene von "Wichtigkeit" sehr deutlich. Aber es hätte nicht so gut geklappt, wenn die maximale Anzahl zwischen den Stufen der "Wichtigkeit" stärker variiert hätte. Es ist einfach genug, scales="free_y"ggplot ( siehe hier ) einzustellen , um viel Leerraum zu vermeiden, aber die Form der Verteilung ist bei niederfrequenten Pegeln von "Wichtigkeit" schwer zu erkennen, da die Balken so klein wären. Vielleicht ist es in solchen Situationen besser, stattdessen die relative Häufigkeit (bedingte Wahrscheinlichkeit) auf der vertikalen Achse zu verwenden.

facettiertes Balkendiagramm

Es ist nicht so "sauber" wie das Tabplot in Stata , mit dem Nick Cox verlinkt hat, vermittelt aber ähnliche Informationen.

R-Code:

library(ggplot)
running2.df <- data.frame(often = factor(often, labels = c("never", "less than once per fortnight", "once every one or two weeks", "two or three times per week", "four or more times per week")), importance = factor(importance, labels = c("not at all important", "somewhat unimportant", "neither important nor unimportant", "somewhat important", "very important")))
ggplot(running2.df, aes(often)) + geom_bar() +
  facet_wrap(~ importance, ncol = 1) +
  theme(axis.text.x=element_text(angle = -45, hjust = 0)) +
  theme(axis.title.x = element_blank())
Silberfisch
quelle