Je me demande comment ajouter une flèche pour pointer directement sur une certaine valeur sur une échelle à côté d'un tracé.Ajout d'une flèche pour pointer une valeur sur une échelle dans R
Disons que j'ai une valeur différente selon les années. Je veux savoir quelle est la valeur d'une année donnée en l'indiquant directement à l'échelle. Par exemple, je veux savoir quelle est la valeur en 2010. Ensuite, l'échelle pointerait comme dans l'image ci-dessous:
Dans cette image, la flèche a été ajoutée. Ce que j'apprécierais vraiment (et je ne sais pas comment le faire), c'est d'imprimer uniquement l'échelle avec la flèche sans le graphe pour que je puisse mettre l'échelle où je veux sur un autre graphe. Un peu comme ceci:
Voici le code pour reproduire l'image, sans la flèche (fortement influencé par this code to produce a scale).
effort = structure(c(-1.2696471203597, 0.176082447349155, 1.17697214807067,
-0.101942469517932, -1.04722718686603, -0.99162220349261, 0.0648724806023204,
2.40028178228585, 0.00926749722890297, -0.101942469517932, 0.00926749722890297,
-0.324362403011601), .Dim = c(12L, 1L), "`scaled:center`" = 127.333333333333, "`scaled:scale`" = 71.9359984902405, decostand = "standardize", .Dimnames = list(
c("2003", "2004", "2005", "2006", "2007", "2008", "2009",
"2010", "2011", "2012", "2013", "2014"), NULL))
plot(effort, type = "n")
image.scale <- function(z, zlim, col = heat.colors(12),
breaks, horiz=TRUE, ylim=NULL, xlim=NULL, ...){
if(!missing(breaks)){
if(length(breaks) != (length(col)+1)){stop("must have one more break than colour")}
}
if(missing(breaks) & !missing(zlim)){
breaks <- seq(zlim[1], zlim[2], length.out=(length(col)+1))
}
if(missing(breaks) & missing(zlim)){
zlim <- range(z, na.rm=TRUE)
zlim[2] <- zlim[2]+c(zlim[2]-zlim[1])*(1E-3)#adds a bit to the range in both directions
zlim[1] <- zlim[1]-c(zlim[2]-zlim[1])*(1E-3)
breaks <- seq(zlim[1], zlim[2], length.out=(length(col)+1))
}
poly <- vector(mode="list", length(col))
for(i in seq(poly)){
poly[[i]] <- c(breaks[i], breaks[i+1], breaks[i+1], breaks[i])
}
xaxt <- ifelse(horiz, "s", "n")
yaxt <- ifelse(horiz, "n", "s")
if(horiz){YLIM<-c(0,1); XLIM<-range(breaks)}
if(!horiz){YLIM<-range(breaks); XLIM<-c(0,1)}
if(missing(xlim)) xlim=XLIM
if(missing(ylim)) ylim=YLIM
plot(1,1,t="n",ylim=ylim, xlim=xlim, xaxt=xaxt, yaxt=yaxt, xaxs="i", yaxs="i", ...)
for(i in seq(poly)){
if(horiz){
polygon(poly[[i]], c(0,0,1,1), col=col[i], border=NA)
}
if(!horiz){
polygon(c(0,0,1,1), poly[[i]], col=col[i], border=NA)
}
}
}
# source("image.scale.R")
layout(matrix(c(1,2,3,0,4,0), nrow=1, ncol=2), widths=c(4,4,1), heights=c(4,1))
layout.show(4)
pal.1=colorRampPalette(c("red", "orange", "yellow"), space="rgb")
breaks <- seq(min(effort),max(effort),length.out = 10)
par(mar=c(1,1,1,8))
image(effort,col=pal.1(length(breaks)-1), breaks=breaks, xaxt="n", ylab="", xlab="")
#Add additional graphics
points(x = 1:12, y = effort ,
pch=1, lwd=2, cex=1,col="black")
#Add scale
par(mar=c(1,1,1,3))
image.scale(effort, col=pal.1(length(breaks)-1), breaks=breaks, horiz=FALSE, yaxt="n")
axis(4,at=breaks, las=2)
Merci beaucoup! C'est parce que je suis en train de tracer un graphique avec plein de trucs dedans. Mais je veux montrer que le graphique a été tracé sous une certaine condition d'effort. J'ai donc trouvé que l'ajout d'une échelle comme celle-ci pourrait être un bon moyen visuel d'indiquer ce qui se passe avec l'autre paramètre (effort). Je dois juste trouver un moyen d'ajouter cette échelle à mon graphique –