J'ai un complot qui contient des données dans la zone que j'aimerais utiliser pour une légende. Existe-t-il un moyen de placer automatiquement l'intrigue dans un en-tête situé au-dessus des points de données les plus élevés dans lequel s'inscrit la légende?
Je peux le faire fonctionner si je saisis manuellement les arguments ylim()
pour agrandir la taille, puis donner les coordonnées exactes de l'emplacement de la légende, mais je préférerais disposer d'un moyen plus souple de procéder. c'est une interface pour une requête de base de données et les niveaux de données peuvent avoir des niveaux très différents.
Éditer 2017:
utilisez ggplot et theme (legend.position = ""):
library(ggplot2)
library(reshape2)
set.seed(121)
a=sample(1:100,5)
b=sample(1:100,5)
c=sample(1:100,5)
df = data.frame(number = 1:5,a,b,c)
df_long <- melt(df,id.vars = "number")
ggplot(data=df_long,aes(x = number,y=value, colour=variable)) +geom_line() +
theme(legend.position="bottom")
Réponse originale 2012: Mettez la légende en bas:
set.seed(121)
a=sample(1:100,5)
b=sample(1:100,5)
c=sample(1:100,5)
dev.off()
layout(rbind(1,2), heights=c(7,1)) # put legend on bottom 1/8th of the chart
plot(a,type='l',ylim=c(min(c(a,b,c)),max(c(a,b,c))))
lines(b,lty=2)
lines(c,lty=3,col='blue')
# setup for no margins on the legend
par(mar=c(0, 0, 0, 0))
# c(bottom, left, top, right)
plot.new()
legend('center','groups',c("A","B","C"), lty = c(1,2,3),
col=c('black','black','blue'),ncol=3,bty ="n")
Vous devez ajouter la taille de la boîte de légende à la plage ylim
#Plot an empty graph and legend to get the size of the legend
x <-1:10
y <-11:20
plot(x,y,type="n", xaxt="n", yaxt="n")
my.legend.size <-legend("topright",c("Series1","Series2","Series3"),plot = FALSE)
#custom ylim. Add the height of legend to upper bound of the range
my.range <- range(y)
my.range[2] <- 1.04*(my.range[2]+my.legend.size$rect$h)
#draw the plot with custom ylim
plot(x,y,ylim=my.range, type="l")
my.legend.size <-legend("topright",c("Series1","Series2","Series3"))
En vous appuyant sur la solution @ P-Lapointe, mais en le rendant extrêmement facile, vous pouvez utiliser les valeurs maximales de vos données à l'aide de max()
, puis réutiliser ces valeurs maximales pour définir le legend
xy. coordonnées. Pour vous assurer de ne pas dépasser les frontières, vous configurez ylim
légèrement au-dessus des valeurs maximales.
a=c(rnorm(1000))
b=c(rnorm(1000))
par(mfrow=c(1,2))
plot(a,ylim=c(0,max(a)+1))
legend(x=max(a)+0.5,legend="a",pch=1)
plot(a,b,ylim=c(0,max(b)+1),pch=2)
legend(x=max(b)-1.5,y=max(b)+1,legend="b",pch=2)
?legend
vous dira:
Arguments
x
, y
Les coordonnées x
et y
à utiliser pour positionner la légende. Ils peuvent être spécifiés par mot-clé ou par tout moyen accepté par xy.coords
: Voir les détails'.
Détails:
Les arguments x
, y
, la légende sont interprétés de manière non standard pour permettre la spécification des coordonnées via un ou deux arguments. Si la légende est manquante et que y
n'est pas numérique, on suppose que le deuxième argument est censé être une légende et que le premier argument spécifie les coordonnées.
Les coordonnées peuvent être spécifiées de n'importe quelle manière acceptée par xy.coords
. Si cela donne les coordonnées d'un point, il est utilisé comme coordonnée en haut à gauche du rectangle contenant la légende. Si elle donne les coordonnées de deux points, ceux-ci spécifient les coins opposés du rectangle (soit une paire de coins, dans n'importe quel ordre).
Vous pouvez également spécifier l'emplacement en définissant x
sur un mot-clé unique de la liste bottomright
, bottom
, bottomleft
, left
, topleft
, top
, topright
, right
et center
. Cela place la légende à l'intérieur du cadre de la parcelle à l'emplacement donné. La correspondance d'arguments partielle est utilisée. L'argument optionnel inset spécifie la distance entre la légende et les marges du tracé. Si une seule valeur est donnée, elle est utilisée pour les deux marges; si deux valeurs sont données, la première est utilisée pour la distance x, la seconde pour la distance y.