2013-02-28 6 views
7

enter image description hereDziałka wielokrotności (czas) z serii R z legendą

Według moich dane teleadresowe (por zdjęciu) nazywa PKB. Chciałbym wiedzieć, jak narysować wszystkie kraje na jednym wykresie. Chciałbym otrzymać legendę dla każdego kraju, np. Różne kolory na linię lub inny kształt na linię.

wiem jak wykreślić jedną serię, na przykład:

ts.plot (PKB $ ALB)

Ale nie wiem, jak wykreślić całą serię z legendą.

Dziękujemy

+0

Należy próbki danych. –

+0

@geektrader Witam, przepraszam, czy możesz podać mi więcej szczegółów, których nie rozumiem. – S12000

+0

Jednym ze sposobów uzyskania pożądanego wykresu byłoby użycie ggplot2, jak pokazano [tutaj] (http: // stackoverflow.com/questions/13324004/plotting-multiple-time-series-in-ggplot) –

Odpowiedz

6

Jeśli używasz xts do tworzenia danych timeseries, można użyć plot.xts od xtsExtra opakowaniu, aby uzyskać pożądany rezultat

#Uncomment below lines to install required packages 
#install.packages("xts") 
#install.packages("xtsExtra", repos="http://R-Forge.R-project.org") 

library(xts) 
library(xtsExtra) 

head(data) 
##    ABC DEF 
## 2007-01-03 83.80 467.59 
## 2007-01-04 85.66 483.26 
## 2007-01-05 85.05 487.19 
## 2007-01-08 85.47 483.58 
## 2007-01-09 92.57 485.50 
## 2007-01-10 97.00 489.46 


plot.xts(data, screens = factor(1, 1), auto.legend = TRUE) 

Dostaniesz coś takiego enter image description here

Jeśli chcesz dane w oddzielnych panelach:

plot.xts(data, auto.legend = TRUE) 

enter image description here

+1

+1 dla alternatywy xts. – A5C1D2H2I1M1N2O1R2T1

+0

to xts jest bardzo interesujące i dobrze wyglądające, ale pojawia się następujący komunikat o błędzie, gdy próbuję zainstalować xtrsextra ... (mam nadzieję, że znajdę inną alternatywę niż przy starszej wersji R ...): Ostrzeżenie w instalacji. Pakiety: pakiet 'xtsExtra' nie jest dostępny (w wersji R 2.15.1) – S12000

+1

@ Swiss12000 wypróbowałeś 'install.packages (" xtsExtra ", repos =" http://R-Forge.R-project.org ")' lub po prostu 'install.packages (" xtsExtra ")' –

4

Co z tym ...?

> set.seed(1) 
> DF <- data.frame(2000:2009,matrix(rnorm(50, 1000, 200), ncol=5)) 
> colnames(DF) <- c('Year', paste0('Country', 2:ncol(DF))) 
> DF # this is how the data.frame looks like: 
    Year Country2 Country3 Country4 Country5 Country6 
1 2000 874.7092 1302.3562 1183.7955 1271.7359 967.0953 
2 2001 1036.7287 1077.9686 1156.4273 979.4425 949.3277 
3 2002 832.8743 875.7519 1014.9130 1077.5343 1139.3927 
4 2003 1319.0562 557.0600 602.1297 989.2390 1111.3326 
5 2004 1065.9016 1224.9862 1123.9651 724.5881 862.2489 
6 2005 835.9063 991.0133 988.7743 917.0011 858.5010 
7 2006 1097.4858 996.7619 968.8409 921.1420 1072.9164 
8 2007 1147.6649 1188.7672 705.8495 988.1373 1153.7066 
9 2008 1115.1563 1164.2442 904.3700 1220.0051 977.5308 
10 2009 938.9223 1118.7803 1083.5883 1152.6351 1176.2215 
> matplot(DF[,-1], col=1:ncol(DF), type='l', lty=1, ylim=range(DF), axes=FALSE) 
> axis(1, 1:nrow(DF), as.character(DF[,1])) 
> axis(2) 
> box() #- to make it look "as usual" 
> legend('topright', names(DF), col=1:ncol(DF), lty=1, cex=.65) 

enter image description here

+1

+1 za udostępnienie ram, z których inni mogą pracować;) – A5C1D2H2I1M1N2O1R2T1

+0

Zasadniczą sprawą jest uświadomienie sobie, że osie muszą być losowane osobno. – jnas

5

Pożyczanie ciężko od Jilber, ofiaruję lekką odmianę. Tutaj nacisk kładzie się na to, że lepiej poradzić sobie z rzeczywistymi obiektami szeregów czasowych, ponieważ to na ogół pozwoli ci w pewien sposób automatycznie uzyskać typy wyników, które mogą Cię zainteresować. Geektrader pokazuje, jak to zrobić z "xts "pakiet, ale możesz też zrobić coś podobnego z bazą R.

Oto zmodyfikowana wersja przykładowych danych Jilbera, gdzie przekonwertowałem go na obiekt ts.

set.seed(1) 
DF <- data.frame(2000:2009,matrix(rnorm(50, 1000, 200), ncol=5)) 
colnames(DF) <- c('Year', paste0('Country', 2:ncol(DF))) 
DF.TS <- ts(DF[-1], start = 2000, frequency = 1) 
DF.TS 
# Time Series: 
# Start = 2000 
# End = 2009 
# Frequency = 1 
#  Country2 Country3 Country4 Country5 Country6 
# 2000 874.7092 1302.3562 1183.7955 1271.7359 967.0953 
# 2001 1036.7287 1077.9686 1156.4273 979.4425 949.3277 
# 2002 832.8743 875.7519 1014.9130 1077.5343 1139.3927 
# 2003 1319.0562 557.0600 602.1297 989.2390 1111.3326 
# 2004 1065.9016 1224.9862 1123.9651 724.5881 862.2489 
# 2005 835.9063 991.0133 988.7743 917.0011 858.5010 
# 2006 1097.4858 996.7619 968.8409 921.1420 1072.9164 
# 2007 1147.6649 1188.7672 705.8495 988.1373 1153.7066 
# 2008 1115.1563 1164.2442 904.3700 1220.0051 977.5308 
# 2009 938.9223 1118.7803 1083.5883 1152.6351 1176.2215 

Teraz tutaj są dwie podstawowe opcje kreślenia:

# Each country in a separate panel, no legends required 
plot(DF.TS) 

enter image description here

# All countries in one plot... colorful, common scale, and so on 
plot(DF.TS, plot.type="single", col = 1:ncol(DF.TS)) 
legend("bottomleft", colnames(DF.TS), col=1:ncol(DF), lty=1, cex=.65) 

enter image description here

+0

Dzięki za komentarz i pobudź moją odpowiedź;) +1 za alternatywę –

6

W ciągu zaledwie 2 linie korzystające ts.plot

ts.plot(time,gpars= list(col=rainbow(10))) 
    legend("topleft", legend = 1:10, col = 1:10, lty = 1) 

Wynik: Działka wielokrotności (czas) z serii R z legendą Plot multiples (time) series in R with legend