Ich möchte zwei Streudiagramme in R überlagern, so dass jeder Satz von Punkten seine eigene (unterschiedliche) y-Achse hat (dh an den Positionen 2 und 4 in der Figur), aber die Punkte erscheinen auf derselben Figur überlagert.
Ist das möglich mit plot
?
Bearbeiten Sie den Beispielcode, der das Problem zeigt
# example code for SO question
y1 <- rnorm(10, 100, 20)
y2 <- rnorm(10, 1, 1)
x <- 1:10
# in this plot y2 is plotted on what is clearly an inappropriate scale
plot(y1 ~ x, ylim = c(-1, 150))
points(y2 ~ x, pch = 2)
ggplot2
: stackoverflow.com/questions/3099219/… (SO suchen nach[r] two y-axes
oder[r] twoord.plot
) - es gibt einige andere verwandte Antworten, obwohl (zu meiner Überraschung, da es sich um eine R-FAQ handelt) nichts identisch istAntworten:
Update : Kopiertes Material, das sich im R-Wiki unter http://rwiki.sciviews.org/doku.php?id=tips:graphics-base:2yaxes befand , Link jetzt defekt: auch auf dem Wayback-Computer erhältlich
Zwei verschiedene y-Achsen auf demselben Plot
(etwas Material ursprünglich von Daniel Rajdl 31.03.2006 15:26)
Bitte beachten Sie, dass es nur sehr wenige Situationen gibt, in denen es angebracht ist, zwei verschiedene Skalen auf demselben Grundstück zu verwenden. Es ist sehr leicht, den Betrachter der Grafik irrezuführen. Überprüfen Sie die folgenden zwei Beispiele und Kommentare zu diesem Problem ( Beispiel 1 , Beispiel 2 aus Junk- Diagrammen ) sowie diesen Artikel von Stephen Few (der zu dem Schluss kommt: „Ich kann mit Sicherheit nicht ein für allemal schließen, dass Diagramme mit zwei skalierten Achsen niemals sind nützlich, nur dass ich mir keine Situation vorstellen kann, die sie angesichts anderer, besserer Lösungen rechtfertigt. “) Siehe auch Punkt 4 in diesem Cartoon ...
Wenn Sie fest entschlossen sind, besteht das Grundrezept darin, Ihr erstes Diagramm zu erstellen,
par(new=TRUE)
zu verhindern, dass R das Grafikgerät löscht, das zweite Diagramm mit zu erstellenaxes=FALSE
(und zu setzenxlab
undylab
leer zu sein -ann=FALSE
sollte auch funktionieren) und dannaxis(side=4)
eine neue Achse hinzuzufügen auf der rechten Seite undmtext(...,side=4)
zum Hinzufügen einer Achsenbeschriftung auf der rechten Seite. Hier ist ein Beispiel mit ein paar erfundenen Daten:twoord.plot()
implotrix
Paket automatisiert diesen Prozess, wiedoubleYScale()
imlatticeExtra
Paket.Ein weiteres Beispiel (angepasst aus einem R-Mailinglistenbeitrag von Robert W. Baer):
Ähnliche Rezepte können verwendet werden, um Diagramme verschiedener Typen zu überlagern - Balkendiagramme, Histogramme usw.
quelle
axis(1,pretty(range(time),10))
Linie ändern ?Wie der Name schon sagt, werden
twoord.plot()
im Plotrix- Paket zwei Ordinatenachsen dargestellt.quelle
Eine Möglichkeit besteht darin, zwei Diagramme nebeneinander zu erstellen.
ggplot2
bietet eine schöne Option dafür mitfacet_wrap()
:quelle
Wenn Sie die Skalen- / Achsenbeschriftungen aufgeben können, können Sie die Daten auf das Intervall (0, 1) neu skalieren. Dies funktioniert beispielsweise für verschiedene "Wackel" -Traks auf Chromosomen, wenn Sie im Allgemeinen an lokalen Korrelationen zwischen den Spuren interessiert sind und diese unterschiedliche Skalen haben (Abdeckung in Tausend, Fst 0-1).
Dann, mit einem Datenrahmen
chrom
,position
,coverage
undfst
Spalten, können Sie etwas tun:Dies hat den Vorteil, dass Sie nicht auf zwei Trakcs beschränkt sind.
quelle
Ich schlage auch vor,
twoord.stackplot()
in denplotrix
Paketdiagrammen mit mehr als zwei Ordinatenachsen.quelle
Eine andere Alternative, die der von @BenBolker akzeptierten Antwort ähnelt, besteht darin, die Koordinaten des vorhandenen Diagramms neu zu definieren, wenn ein zweiter Satz von Punkten hinzugefügt wird.
Hier ist ein minimales Beispiel.
Daten:
Handlung:
quelle