dotplot in R mit Gitter: Darstellung der vertikalen Achse und Fehlerbalken
Ich versuche zu tun, einem dotplot mit den Bibliotheken lattice
und latticeExtra
im R
. Jedoch keine korrekte Darstellung der Werte auf der vertikalen y-Achse erfolgt. Statt über die tatsächlichen Werte der numerischen Variablen R
Grundstücke den Rang des Wertes. Das heißt, es gibt Werte [375, 500, 625, 750, ..., 3000]
und R
Grundstücke Ihren Reihen [1,2,3,4,...23]
und wählt den Maßstab entsprechend. Hat jemand erlebt ein problem wie dieses? Wie kann ich verwalten, die eine angemessene Vertretung mit Zecken wie (0, 500, 1000, 1500, ...)
auf der vertikalen y-Skala?
Hier der Programm-code so weit:
df.dose <- read.table("data.csv", sep=",", header=TRUE)
library(lattice); library(latticeExtra)
useOuterStrips(dotplot(z ~ sample.size | as.factor(effect.size)*as.factor(true.dose),
groups=as.factor(type), data=df.dose, as.table=TRUE))
(Hinzugefügt von Kommentar unten): Auch, können Fehlerbalken Hinzugefügt werden, um die Grafik? Ich dachte, der folgenden (werden Hinzugefügt, um die call), aber es scheint nicht zu funktionieren. Ist es irgendwie möglich?
up=z+se, lo=z-se, panel.groups=function(x,y,..., up, lo, subscripts){
up <- up[subscripts]
lo <- lo[subscripts]
panel.segments(lo, as.numeric(y), up, as.numeric(y), ...)
}
Hier meine Daten: https://www.dropbox.com/s/egy25cj00rhum40/data.csv
Hinzugefügt: hier ist der relevante Teil der Daten mit expand.grid
und dput
:
df.dose <- expand.grid(effect.size=c(-.5, -.625, -0.75),
sample.size=c(40L, 60L, 80L),
true.dose=c(375L, 500L, 750L, 1125L),
type=c("dose", "categ", "FP2", "FP1"))
df.dose$z <- c(875L, 875L, 750L, 750L, 750L, 625L, 625L, 625L, 625L, 875L,
875L, 750L, 1000L, 1000L, 1000L, 1125L, 1000L, 875L, 1000L, 1000L,
875L, 1000L, 1000L, 875L, 1125L, 1000L, 1000L, 1250L, 1125L,
1000L, 1250L, 1250L, 1125L, 1250L, 1000L, 1000L, 500L, 500L,
500L, 500L, 500L, 500L, 500L, 500L, 500L, 625L, 625L, 625L, 625L,
625L, 625L, 625L, 625L, 625L, 750L, 750L, 625L, 750L, 750L, 750L,
750L, 750L, 750L, 875L, 875L, 750L, 750L, 875L, 875L, 875L, 875L,
875L, 2500L, 1500L, 1125L, 2000L, 1000L, 1750L, 250L, 500L, 500L,
1250L, 750L, 625L, 875L, 500L, 500L, 875L, 500L, 375L, 1250L,
875L, 750L, 1000L, 625L, 625L, 875L, 500L, 500L, 1125L, 1000L,
875L, 1125L, 875L, 625L, 1125L, 1000L, 625L, 2500L, 2125L, 2375L,
2000L, 750L, 2625L, 250L, 625L, 250L, 875L, 875L, 500L, 625L,
500L, 625L, 1000L, 500L, 375L, 1000L, 875L, 625L, 875L, 500L,
500L, 875L, 500L, 500L, 1250L, 1125L, 875L, 1125L, 875L, 750L,
1250L, 1000L, 625L)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie
z
Faktor:dotplot(factor(z) ~ ...
Außerdem möchten Sie wahrscheinlich einige jitter in die Handlung zu verhindern, überschneiden sich; versuchen Sie
jitter.x=TRUE
oderjitter.y=TRUE
oder beides.Urteilen, indem Sie Ihren Kommentar unten und suchen Sie die Daten erneut, ich glaube, du bist der Darstellung der dotplot der falsche Weg. Ich denke, Sie wollen die Zeilen für die sample-Größen, nicht für die
z
's. Wenn Sie wirklich wollenz
auf der vertikalen Achse, die Sie dann benötigen, hinzufügenhorizontal=TRUE
. Man könnte auch tauschen, was auf der horizontalen und vertikalen Achsen.Hinzufügen, um einen Fehler bar, es ist ein wenig komplizierter, weil Sie Gruppen haben innerhalb der Platten, so dass Sie brauchen, um eine
panel.groups
Funktion; zusätzlich, so dass die Linien nicht überlappen, werden Sie wahrscheinlich wollen, um jitter Sie von Seite zu Seite etwas, das geschieht am besten in einem benutzerdefiniertenpanel
Funktion.data
, so dass Sie haben, geben Sie diese alsup=df.dose$z + df.dose$se
. Auch Ihre Segmente Anruf wird Recht nur, wenn Sie gewechselt haben, die Achsen, wenn Sie mithorizontal=FALSE
schalten Sie die Argumente, um sich angemessen.Ich bin mir nicht sicher, ob ich das problem zu verstehen und Sie gebeten, für ein Gitter-Lösung, aber ich dachte, es kann hilfreich sein, um zu sehen, dies geschieht mit ggplot2:
Ergibt:
Oder können wir frei Waage:
Nachgeben:
position=position_jitter(width=.005)
innerhalb vongeom_point
oder Chaos mitalpha
die Transparenz (ein bisschen) der Punkte. Ich glaube, es gibt einen besseren Weg, um set-up zeichnen dieses alle zusammen. Vielleicht Facettierung anders (nach Typ) anstelle oder erstellen Sie eine neue variable verschmilzt, dass z und Typ.geom_errorbar
(LINK). Ich bin mir nicht wirklich sicher, was Sie nach auf die zweite Anfrage. Vielleicht möchten Siegeom_hline
(LINK)Können Sie auch
xYplot
von der Paket Hmisc, zu erreichen, eine Lösung ähnlich @Aaron, obwohl es vielleicht ein bisschen schwierig, um die gleichen jitter bekam er:Aber wirklich informativ ist plot? Tut es zeigen Sie Ihre Daten, Effekte gut, hebt Ihre Vergleiche? Es tut erkunden, trends in den Daten? Um besser zu sehen, alle Faktoren, die Sie zeichnen möchten, würde ich zuerst machen, die Linien die verbindungen zwischen den Gruppen, um Sie besser sehen zu einzelnen Effekte innerhalb der verschiedenen
sample.size
.Aber es ist etwas versteckt und es ist immer noch zu viel Lärm aufgrund der Dichte der Daten. Lassen Sie uns loszuwerden, die
effect.size
- und plot Regressionsgeraden, obwohl es wahrscheinlich eine Sünde zu tun, mit so wenigen Datenpunkten.Ich weiß, ich hätte nicht davon überzeugt, Sie, aber manchmal ist es besser zu entladen-eine Handlung aus zu vielen Faktoren, um besseren Blick auf die Daten. Manchmal ist es vielleicht leichter zugänglich sind optisch, wenn man die Faktoren getrennt.