Korzystając z następującego kodu, próbowałem narysować cztery wykresy na wykresie w R
. Nie jestem zadowolony z tej figury, ponieważ między wykresami jest dużo miejsca, dlatego szerokość wykresów nie jest wystarczająca do analizy wykresów.
Czy ktoś mógłby mi pomóc w stworzeniu ładnego wykresu zawierającego cztery wykresy?
Jak mogę zachować etykiety osi X od 1 do 10 zamiast domyślnych 5 etykiet?
Dane:
a1: 11,013 13,814 13,831 13,714 13,787 13,734 13,778 13,771 13,823 13,659
a2: 5,181 7,747 8,314 861 7,920 8,158 8,540 8,845 7,881 8,301
Użyłem danych a1 dla b1, c1 i d1; dane a2 dla b2, c2 i d2 właśnie tutaj.
Postać:
Kod:
op=par(mfrow=c(4,1), mar=c(5.5,5.1,4.1,2.1))
plot(a1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="A")
lines(a2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
par(xpd=T)
legend(1,26.5,c("X","Y"),bty="n",horiz=T,cex=1.5,col=c("red1","darkblue"),text.col=c("red1","darkblue"),pch=c(1,3),lty=c(2,3),x.intersp=0.4,adj=0.2)
plot(b1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="B")
lines(b2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
plot(c1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="C")
lines(c2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
plot(d1/1000, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="D")
lines(d2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
> mtext("Price", side=2, at=100,line=3,cex=1.1)
r
data-visualization
samarasa
źródło
źródło
Odpowiedzi:
Jeśli chcesz pozostać przy metodzie, której używałeś, możesz nauczyć się polecenia układu (). Kilka innych zmian w szczegółach i możesz zbliżyć wykresy do siebie. Możesz także umieścić unikalne rzeczy, które zmieniają się między wykresami na liście (takie jak dane i marginesy), a następnie przejść przez pętlę. Zauważysz również, że utworzyłem dolną oś za pomocą polecenia direct axis (), abyś mógł kontrolować, dokąd idą elementy.
Powinienem zauważyć, że tak naprawdę nie dołożyłem starań, aby uczynić to tak przyjemnym, jak tylko mogłem i zamiast zrobić ten pierwszy fikcyjny wykres, mogłem po prostu ustawić wystarczająco dużo miejsca w pierwszej klatce. Niestety ustawienie mar () próbuje wypełnić ramkę, a górny margines wpływa na odległość, na którą nie ma etykiety nad wykresem, więc musiałbym iść i zrobić wszystkie moje etykiety za pomocą mtext () lub text () zamiast po prostu użyć główne ustawienie w fabule i nie miałem ochoty tego robić
źródło
Poleciłbym nauczyć się pakietu graficznego sieci. Mogę zbliżyć się do tego, co chcesz, za pomocą kilku linii. Najpierw spakuj swoje dane w ramkę danych, mniej więcej tak:
co daje:
Następnie użyj sieci
xyplot
:co daje ładny wykres, taki jak:
EDYTOWAĆ:
Jeśli chcesz mieć różne symbole i linie i wyświetlać je w swojej legendzie, staje się to skomplikowane, ponieważ dosłownie budujesz legendę sam i musisz wiedzieć, jak uzyskać domyślne kolory sieci, jeśli sam ich nie zastąpisz :
EDYCJA 2:
Możesz uprościć kod i wykres, jeśli dwie kategorie są tak proste jak „X” i „Y”:
który użyje „X” i „Y” jako symboli punktowych. W ogóle nie potrzebujesz legendy, a możesz poświęcić jeszcze więcej miejsca samym wykresom. (Z drugiej strony możesz nie polubić wyglądu lub może być trudniej ustalić dokładny środek punktu, choć nie jest to tak duży problem, jak to możliwe, ponieważ linia przechodzi przez każdy punkt.)
EDYCJA 3:
W rzeczywistości należy dodać
strip=F, strip.left=T,
do wykresu, aby umieścić etykiety A, B, C, D po lewej stronie wykresów, co daje więcej miejsca na długim wykresie:źródło
grid
rzecz: kratownica i ggplot2 budują na siatce) .Oto wersja rozwiązania @ Brandon,
ggplot2
która zawiera pożądane zachowanie legendy:Uważam, że legendy są znacznie łatwiejsze
ggplot2
, ale YMMV.EDYTOWAĆ
Odpowiadając na kilka pytań w komentarzach. Aby określić konkretne typy punktów lub linii, należy użyć
scale_aesthetic_manual
gdzieaesthetic
jest alboshape
,linetype
itd Na przykład:Zmiana rozmiaru różnych etykiet osi odbywa się poprzez zmianę ustawień w motywie, zwykle za pomocą
opts()
. Na przykład:Powinieneś naprawdę zagłębić się w stronę internetową i jego książkę, aby uzyskać więcej informacji.
źródło
Podobnie do odpowiedzi Wayne'a, również użyłbym innego pakietu, a mianowicie
ggplot2
Co daje nam wykres taki jak:
źródło
+ opts(panel.background=theme_blank())
theme_get()
aby zobaczyć, co możesz zmienić. Następnie postępuj zgodnie z tym samym schematem, co mój ostatni komentarz, ustawiając je=theme_blank()
melt()