R图例放置在图中

时间:2012-01-19 16:30:31

标签: r plot legend

我有一个情节,其数据会运行到我想用于图例的区域。有没有办法让情节自动放在最高数据点上方的标题空间以适应图例?

如果我手动输入ylim()参数来扩展大小然后给出我想要传说所在位置的确切坐标,我可以让它工作,但我更愿意有一个更灵活的方法这样做是因为它是数据库查询的前端,数据级别可能有不同的级别。

enter image description here

4 个答案:

答案 0 :(得分:28)

编辑2017:

使用ggplot和主题(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")

2012年原始答案: 将图例放在底部:

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")

enter image description here

答案 1 :(得分:25)

您必须将图例框的大小添加到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"))

enter image description here

答案 2 :(得分:10)

在@ P-Lapointe解决方案的基础上,但是非常简单,您可以使用max()使用数据中的最大值,然后重新使用这些最大值来设置legend xy坐标。为确保您不会超出边界,请将ylim设置为略高于最大值。

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)

enter image description here

答案 3 :(得分:1)

?legend会告诉您:

参数

xy
用于定位图例的xy坐标。它们可以通过关键字或以xy.coords接受的任何方式指定:请参阅“详细信息”。

详细信息:

参数xy,图例以非标准方式解释,以允许通过一个或两个参数指定坐标。如果缺少图例且y不是数字,则假定第二个参数是图例,第一个参数指定坐标。

可以以xy.coords接受的任何方式指定坐标。如果给出一个点的坐标,则将其用作包含图例的矩形的左上角坐标。如果它给出两个点的坐标,则它们指定矩形的相对角(任意角度的任意一对)。

也可以通过将x设置为列表bottomrightbottombottomleftleft,{{1}中的单个关键字来指定位置},toplefttoptoprightright。这会将图例放置在给定位置的绘图框内部。使用部分参数匹配。可选的inset参数指定图例从绘图边距插入的距离。如果给出单个值,则它用于两个边距;如果给出两个值,则第一个用于x距离,第二个用于y距离。