Porównaj ceny domen i usług IT, sprzedawców z całego świata

Zbuduj wielokrotne (czasowe) serie w R z legendą


Według moich danych (patrz rysunek) nazywa się to PKB. Chciałbym wiedzieć, jak nanieść wszystkie kraje na jednym wykresie. Chciałbym uzyskać legendę dla każdego kraju, na przykład różne kolory na linię lub różne kształty na linię.
Wiem jak zbudować jedną serię, na przykład:
ts.plot(GDP$ALB)
Ale nie wiem, jak zbudować wszystkie odcinki z legendą.
podziękować
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Pożyczając mocno od Gilbera, proponuję małą odmianę. Nacisk jest tutaj położony na to, że może lepiej będzie radzić sobie z obiektami szeregów czasu rzeczywistego, ponieważ pozwoli to nieco automatycznie uzyskać typy wyników, które mogą Cię zainteresować. Geektrader pokazuje, jak to zrobić z pakietem "xts", ale możesz też zrobić kilka podobnych rzeczy z bazą R.
Oto zmodyfikowana wersja przykładowych danych Gilbera, w których przekonwertowałem je 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

Oto dwie główne opcje kreślenia:
# Each country in a separate panel, no legends required
plot(DF.TS)

# 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)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli używasz
xts
do generowania danych szeregów czasowych, możesz użyć
plot.xts
z pakietu
xtsExtra
, aby uzyskać pożądany wynik
#Uncomment below lines to install required packages
#install.packages("xts")
#install.packages("xtsExtra", repos="[url=http://R-Forge.R-project.org"]http://R-Forge.R-project.org"[/url];)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)

Otrzymasz coś takiego

Jeśli chcesz, aby dane były w osobnym panelu:
plot.xts(data, auto.legend = TRUE)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Tylko 2 linie używają ts.plot
ts.plot(time,gpars= list(col=rainbow(10)))
legend("topleft", legend = 1:10, col = 1:10, lty = 1)

Wynik: wykreślenie wielu szeregów (czasowych) w R z legendą
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Co powiesz na to? ..
> 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)

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się