Chciałbym nałożyć dwa wykresy rozrzutu w R, tak aby każdy zestaw punktów miał swoją własną (inną) oś Y (tj. W pozycjach 2 i 4 na rysunku), ale punkty wydają się nałożone na tej samej figurze.
Czy można to zrobić plot
?
Edytuj przykładowy kod pokazujący problem
# 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/… (szukam SO[r] two y-axes
lub[r] twoord.plot
) - jest kilka innych powiązanych odpowiedzi, chociaż (ku mojemu zdziwieniu, ponieważ jest to R FAQ) nic identycznegoOdpowiedzi:
aktualizacja : skopiowany materiał, który znajdował się na wiki R pod adresem http://rwiki.sciviews.org/doku.php?id=tips:graphics-base:2yaxes , łącze jest teraz uszkodzone: również dostępne z wayback machine
Dwie różne osie y na tej samej działce
(trochę materiału oryginalnie autorstwa Daniela Rajdla 2006/03/31 15:26)
Należy pamiętać, że jest bardzo niewiele sytuacji, w których właściwe jest użycie dwóch różnych skal na tym samym poletku. Bardzo łatwo jest wprowadzić w błąd widza grafiki. Sprawdź następujące dwa przykłady i uwagi dotyczące tej kwestii ( Przykład 1 , Przykład 2 z Junk Charts ), a także ten artykuł Stephena Few (który stwierdza „Na pewno nie można stwierdzić, raz na zawsze, że wykresy z podwójną skalę osi nie są przydatne; tylko tyle, że nie potrafię wymyślić sytuacji, która je uzasadnia w świetle innych, lepszych rozwiązań. ”) Zobacz również punkt 4 na tej kreskówce ...
Jeśli jesteś zdeterminowany, podstawową receptą jest utworzenie pierwszego wykresu, ustawienie
par(new=TRUE)
uniemożliwiające R wyczyszczenie urządzenia graficznego, utworzenie drugiego wykresu zaxes=FALSE
(i ustawieniexlab
iylab
pozostawienie pustego -ann=FALSE
powinno również działać), a następnie użycieaxis(side=4)
do dodania nowej osi po prawej stronie imtext(...,side=4)
aby dodać etykietę osi po prawej stronie. Oto przykład wykorzystujący trochę zmyślonych danych:twoord.plot()
wplotrix
pakiecie automatyzuje ten proces, podobnie jakdoubleYScale()
wlatticeExtra
pakiecie.Inny przykład (zaczerpnięty z postu na liście mailingowej R autorstwa Roberta W. Baera):
Podobnych receptur można użyć do nałożenia wykresów różnych typów - wykresów słupkowych, histogramów itp.
źródło
axis(1,pretty(range(time),10))
linię?Jak sama nazwa wskazuje,
twoord.plot()
w pakiecie plotrix kreśli dwie osie rzędnych.źródło
Jedną z opcji jest wykonanie dwóch działek obok siebie.
ggplot2
zapewnia fajną opcję zfacet_wrap()
:źródło
Jeśli możesz zrezygnować ze skal / etykiet osi, możesz przeskalować dane do (0, 1) interwału. Działa to na przykład w przypadku różnych śladów „poruszania się” na chromosomach, gdy interesują Cię lokalne korelacje między ścieżkami i mają one różne skale (pokrycie w tysiącach, Fst 0-1).
Następnie, mając ramkę danych z
chrom
,position
,coverage
ifst
kolumn, można zrobić coś takiego:Zaletą tego jest to, że nie jesteś ograniczony do dwóch traków.
źródło
Ja również sugeruję,
twoord.stackplot()
wplotrix
pakiecie działki z większą liczbą dwóch osi rzędnych.źródło
Inną alternatywą, podobną do zaakceptowanej odpowiedzi przez @BenBolker, jest ponowne zdefiniowanie współrzędnych istniejącego wykresu podczas dodawania drugiego zestawu punktów.
Oto minimalny przykład.
Dane:
Wątek:
źródło