Chciałbym narysować y1 i y2 na tym samym wykresie.
x <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
plot(x, y1, type = "l", col = "red")
plot(x, y2, type = "l", col = "green")
Ale kiedy robię to w ten sposób, nie są one kreślone razem na tej samej fabule.
W Matlabie można to zrobić hold on
, ale czy ktoś wie, jak to zrobić w R?
?curve
. Zastosowanieadd=TRUE
.Odpowiedzi:
lines()
lubpoints()
doda do istniejącego wykresu, ale nie utworzy nowego okna. Więc musisz to zrobićźródło
plot(sin); curve(cos, add=TRUE)
.lines(x2,y2,...)
zamiastlines(x,y2,...)
Możesz także używać
par
i drukować na tym samym wykresie, ale na innej osi. Coś w następujący sposób:Jeśli przeczytasz szczegółowo
par
wR
, będziesz w stanie wygenerować naprawdę ciekawe wykresy. Kolejną książką do obejrzenia jest grafika R Paula Murrela.źródło
xlab="", ylab="", ...
i kilka innych w drugimplot
.Przy konstruowaniu wykresów wielowarstwowych należy wziąć pod uwagę
ggplot
pakiet. Chodzi o to, aby stworzyć obiekt graficzny o podstawowej estetyce i stopniowo go ulepszać.ggplot
styl wymaga spakowania danychdata.frame
.Podstawowe rozwiązanie:
Tutaj
+ operator
służy do dodawania dodatkowych warstw do podstawowego obiektu.Dzięki temu
ggplot
masz dostęp do obiektu graficznego na każdym etapie kreślenia. Załóżmy, że zwykła konfiguracja krok po kroku może wyglądać następująco:g
tworzy fabułę i można ją zobaczyć na każdym etapie (po utworzeniu co najmniej jednej warstwy). Dalsze zaklęcia fabuły są również tworzone za pomocą stworzonego obiektu. Na przykład możemy dodać etykiety dla osi:Finał
g
wygląda jak:AKTUALIZACJA (08.11.2013):
Jak wskazano w komentarzach,
ggplot
filozofia sugeruje wykorzystanie danych w długim formacie. Możesz odnieść się do tej odpowiedzi , aby zobaczyć odpowiedni kod.źródło
ggplot
obsługuje to bardziej naturalnie niż w „szerokim” formacie, którego używasz.ggplot
filozofii ...Myślę, że odpowiedź, której szukasz, to:
źródło
"add" is not a graphical parameter
ostrzeżenie, a następnie drukuje drugi wykres na pierwszym."add" is not a graphical parameter
. Mój R jestR version 3.2.3 (2015-12-10)
. Możesz użyćpar(new=TRUE)
polecenia między tymi wykresami.Użyj
matplot
funkcji:użyj tego, jeśli
y1
iy2
są oceniane w tych samychx
punktach. Skaluje oś Y, aby dopasować ją do tego, która wartość jest większa (y1
luby2
), w przeciwieństwie do niektórych innych odpowiedzi, które zostaną przycięte,y2
jeśli będzie większa niży1
(rozwiązania ggplot w większości są w porządku).Alternatywnie, a jeśli dwie linie nie mają tych samych współrzędnych x, ustaw granice osi na pierwszym wykresie i dodaj:
Dziwi mnie, że Q ma 4 lata i nikt nie wspomniał
matplot
ani niex/ylim
...źródło
tl; dr: Chcesz użyć
curve
(zadd=TRUE
) lublines
.Nie zgadzam się z
par(new=TRUE)
tym, ponieważ spowoduje to podwójne wydrukowanie znaczników i etykiet osi. Na przykładDane wyjściowe
plot(sin); par(new=T); plot( function(x) x**2 )
.Zobacz, jak pomieszane są etykiety osi pionowej! Ponieważ zakresy są różne, musisz ustawić
ylim=c(lowest point between the two functions, highest point between the two functions)
, co jest mniej łatwe niż to, co zamierzam ci pokazać --- i znacznie mniej łatwe, jeśli chcesz dodać nie tylko dwie krzywe, ale wiele.To, co zawsze myliło mnie w spiskowaniu, to różnica między
curve
ilines
. (Jeśli nie pamiętasz, że są to nazwy dwóch ważnych poleceń drukowania, po prostu zaśpiewaj .)Oto duża różnica między
curve
ilines
.curve
wykreśli funkcję, npcurve(sin)
.lines
Działki punktów z wartości x i y, takie jak:lines( x=0:10, y=sin(0:10) )
.A oto niewielka różnica:
curve
trzeba się do niego zwrócić zadd=TRUE
tym, co próbujesz zrobić, przylines
założeniu, że dodajesz do istniejącej fabuły.Oto wynik połączenia
plot(0:2); curve(sin)
.Za kulisami sprawdź
methods(plot)
. I sprawdźbody( plot.function )[[5]]
. Kiedy wywołujeszplot(sin)
R, odkrywa, żesin
jest to funkcja (a nie wartości y) i używaplot.function
metody, która kończy się wywołaniemcurve
. Podobniecurve
narzędzie przeznaczone do obsługi funkcji.źródło
jeśli chcesz podzielić wykres na dwie kolumny (2 wykresy obok siebie), możesz to zrobić w następujący sposób:
Link referencyjny
źródło
Jak opisano w @redmode, możesz narysować dwie linie w tym samym urządzeniu graficznym, używając
ggplot
. W tej odpowiedzi dane były w „szerokim” formacie. Jednak podczas korzystania zggplot
niego najwygodniej jest przechowywać dane w ramce danych w „długim” formacie. Następnie, używając różnych „zmiennych grupujących” waes
argumentach tematycznych, właściwości linii, takie jak rodzaj linii lub kolor, będą się różnić w zależności od zmiennej grupującej i pojawią się odpowiednie legendy.W tym przypadku możemy zastosować
colour
estetykę, która dopasowuje kolor linii do różnych poziomów zmiennej w zbiorze danych (tutaj: y1 vs y2). Ale najpierw musimy stopić dane z szerokiego na długi format, używając np. Funkcji „stop” zreshape2
pakietu. Inne metody przekształcania danych opisano tutaj: Przekształcanie data.frame z formatu szerokiego na długi .źródło
Jeśli używasz grafiki bazowej (tzn. Nie grafiki kratowej / siatki), możesz naśladować funkcję MATLAB, korzystając z funkcji punktów / linii / wielokątów, aby dodać dodatkowe szczegóły do swoich wykresów bez rozpoczynania nowego wykresu. W przypadku układu wielopunktowego możesz użyć,
par(mfg=...)
aby wybrać, do którego działki chcesz dodać elementy.źródło
Oznacza to, że możesz użyć punktów do wykreślenia.
źródło
Zamiast przechowywać wartości do wykreślenia w tablicy, przechowuj je w macierzy. Domyślnie cała macierz będzie traktowana jako jeden zestaw danych. Jeśli jednak dodasz taką samą liczbę modyfikatorów do wykresu, np. Col (), ponieważ masz wiersze w macierzy, R zorientuje się, że każdy wiersz powinien być traktowany niezależnie. Na przykład:
Powinno to działać, chyba że zestawy danych mają różne rozmiary.
źródło
Idiomatic Matlab
plot(x1,y1,x2,y2)
można przetłumaczyć na R,ggplot2
na przykład w następujący sposób:Zainspirowany przez podwójne wykresy Tingting Zhao z innym zakresem osi x za pomocą ggplot2 .
źródło
Możesz użyć
ggplotly()
funkcji z pakietu plot , aby zamienić dowolny z przykładów gggplot2 tutaj na interaktywny, ale myślę, że ten rodzaj wykresu jest lepszy bez ggplot2 :źródło
Możesz również utworzyć fabułę za pomocą ggvis :
Spowoduje to utworzenie następującego wykresu:
źródło
Używanie
plotly
(dodawanie rozwiązaniaplotly
z pierwotną i wtórną osią y - wydaje się, że brakuje):Zrzut ekranu z działającej wersji demo:
źródło
Error in library(plotly) : there is no package called ‘plotly’
dlaczego?plotly
? Musisz zainstalować pakiet za pomocąinstall.packages("plotly")
polecenia.możemy również użyć biblioteki kratowej
Dla określonych kolorów
źródło