2009-12-16 10 views
9

En R (environnement de calcul statistique) je voudrais sur un graphique générique, avec le temps sur l'axe des x, mettre en évidence certaines années spécifiques.Surlignage des valeurs spécifiques dans R plot

Comment puis-je faire ceci de mieux? Mon idée est par exemple une barre jaune clair pour les années surlignées, derrière l'intrigue bien sûr.

Le code de la parcelle que j'ai maintenant:

pdf("temperature_imfs_big_interm5.pdf", width=6, height=8); 
par(mfrow=c(temperature$bigEmdIm5$nimf+1,1), mar=c(2,1,2,1)) 
for(i in 1:temperature$bigEmdIm5$nimf) { 
    plot(timeline$big, temperature$bigEmdIm5$imf[,i], type="l", xlab="", ylab="", ylim=range(temperature$bigEmdIm5$imf[,i]), axes=FALSE, main=paste(i, "-th IMF", sep=""))#; abline(h=0) 
    axis.POSIXct(side=1, at=tickpos$big) 
} 
plot(timeline$big, temperature$bigEmdIm5$residue, xlab="", ylab="", axes=FALSE, main="residue", type="l") 
axis.POSIXct(side=1, at=tickpos$big) 
dev.off(); 

où la température $ bigEmdIm5 est la sortie du mode emperical La décomposition. Les données sont en mois, donc je voudrais mettre l'accent sur 01/1950 jusqu'au 12/1950 par exemple.

+0

Pouvez-vous s'il vous plaît mettre les données quelque part, ou ajouter une commande pour créer un simulacre data.frame afin que nous puissions vous aider? –

+1

De même, si vos données d'axe x sont de la classe POSIXct, alors appeler 'axis (side = 1, at = tickpos)' devrait faire et est un meilleur idiome que de forcer explicitement un dispatch. –

+0

rcs: Hm, peut-être que je suis trop gâté de 'zoo' et' xts'. Est-ce qu'il échoue même lorsque vous utilisez 'Date' au lieu de la plus haute résolution. 'POSIXct'? Quoi qu'il en soit, merci pour le heads-up! –

Répondre

11

Utiliser la transparence alpha:

x <- seq(as.POSIXct("1949-01-01", tz="GMT"), length=36, by="months") 
y <- rnorm(length(x)) 

plot(x, y, type="l", xaxt="n") 
rect(xleft=as.POSIXct("1950-01-01", tz="GMT"), 
    xright=as.POSIXct("1950-12-01", tz="GMT"), 
    ybottom=-4, ytop=4, col="#123456A0") # use alpha value in col 
idx <- seq(1, length(x), by=6) 
axis(side=1, at=x[idx], labels=format(x[idx], "%Y-%m")) 

ou parcelle région mis en évidence derrière les lignes :

plot(x, y, type="n", xaxt="n") 
rect(xleft=as.POSIXct("1950-01-01", tz="GMT"), 
    xright=as.POSIXct("1950-12-01", tz="GMT"), 
    ybottom=-4, ytop=4, col="lightblue") 
lines(x, y) 
idx <- seq(1, length(x), by=6) 
axis(side=1, at=x[idx], labels=format(x[idx], "%Y-%m")) 
box() 

plot output http://img341.imageshack.us/img341/7292/rect.png

1

Vous pouvez utiliser la fonction chartSeries() dans quantmod avec un xts TimeSeries et la fonction addTA() pour ajouter le fond en soulignant:

addTA(xts(rep(TRUE,length(times)), times), on=-1, col="#333333", border=NA) 
+0

Pour cette solution, je devrais changer ma commande de traçage Je suppose –

+1

Si vous voulez une réponse spécifique, vous devez donner plus de détails. Quelle est votre commande de traçage? – Shane

+0

Je mets à jour ma question avec mes commandes plot actuelles –

5

Voici une solution qui utilise zoo simplement parce que cela simplifie le sous-ensemble. Vous pouvez faire la même chose avec l'indexation standard ainsi:

## create a long monthly sequence and a sub-sequence 
months <- seq(as.Date("1950-01-01"), as.Date("2009-12-12"), by="month") 
subset <- seq(as.Date("1970-01-01"), as.Date("1979-12-31"), by="month") 

## generate some random values 
set.seed(42) 
values <- cumsum(rnorm(length(months))) 

## plot as a zoo object, overlay a gray background and overplot a line in red 
library(zoo) 
Z <- zoo(values, months) 
plot(Z) 
rect(xleft=head(subset,1), xright=tail(subset,1), 
    ybottom=par("usr")[3], ytop=par("usr")[4], 
    density=NA, col="lightgray") 
lines(Z[subset], col='red') 
box() 

alt text http://dirk.eddelbuettel.com/misc/plotRegionExample.png

En utilisant par("usr") nous évitons le besoin de valeurs explicites pour les marques de la région supérieure et inférieure. Et l'indexation zoo facilite la recherche des points de départ et d'arrivée. Cela fonctionnerait de la même manière pour les données dans différentes résolutions temporelles.

Questions connexes