R 中图例对象之间的距离更近

问题描述 投票:0回答:2

我必须在 R 中绘制以下图表:

library(TTR)
x.date<-seq(1,num.years,by=20)
x.axis<-list(x1="1900",x2="1920",x3="1940",x4="1960",x5="1980",x6="2000")
plot(Annual.Mean.1, type="l",col="gray48",xaxt="n", xlab="Years",
 ylab="Temperature")
grid()
axis(1,x.date,x.axis)
SMA.1<-SMA(Annual.Mean.1,n=10
par(new=TRUE)
lines(SMA.1,col="red",type="l",lwd="2",xaxt="n",yaxt="n",ann=FALSE)
SMA.2<-SMA(Annual.Mean.1,n=15)
par(new=TRUE)
lines(SMA.2,col="mediumpurple",type="l",lwd="2",xaxt="n",yaxt="n",ann=FALSE)
SMA.3<-SMA(Annual.Mean.1,n=20)
lines(SMA.3,col="blue",type="l",lwd="2",xaxt="n",yaxt="n",ann=FALSE)
legend("topleft",legend=c("Average Temperature","SMA 10 years","SMA 15 years","SMA 20 Years"),
   text.col=c("black","red","mediumpurple","blue"),col=c("gray48","red","mediumpurple","blue"),
   cex=0.7,lty=c(1,1,1,1))

输出是这样的:

在上图中,包含图例的矩形非常大;我想获得一个较小的矩形,如下图所示:

如何做到这一点?

更新

根据评论中的建议,我修改了我的代码,以便任何人都可以重现:

library(TTR)
set.seed(1)
x.date<-seq(1,111,by=20)
x.axis<-list(x1="1900",x2="1920",x3="1940",x4="1960",x5="1980",x6="2000")
data<-runif(111,-3,3)
plot(data, type="l",col="gray48",xaxt="n",xlab="Years",
ylab="Temperature")
grid()
axis(1,x.date,x.axis)
SMA.1<-SMA(data,n=10)
par(new=TRUE)
lines(SMA.1,col="red",type="l",lwd="2",xaxt="n",yaxt="n",ann=FALSE)
SMA.2<-SMA(data,n=15)
par(new=TRUE)
lines(SMA.2,col="mediumpurple",type="l",lwd="2",xaxt="n",yaxt="n",ann=FALSE)
SMA.3<-SMA(data,n=20)
lines(SMA.3,col="blue",type="l",lwd="2",xaxt="n",yaxt="n",ann=FALSE)
legend("topleft",legend=c("Average Temperature","SMA 10 years","SMA 15 years","SMA 20 Years"),
   text.col=c("black","red","mediumpurple","blue"),col=c("gray48","red","mediumpurple","blue"),
   cex=0.7,lty=c(1,1,1,1))

我仍然遇到与上面解释的相同的问题。

r plot
2个回答
0
投票

减少

cex
调用中
legend
参数的值。您可以在
cex=0.7
找到它。尝试 0.6 或 0.5(或更低),直到找到最佳尺寸。

如果这不起作用,另一种方法是使用参数

bty = "n"
完全删除图例周围的框。如果图例的背景挡住了图表中的线条,请在代码中向上移动
legend
命令,以便首先绘制它,然后在其上方绘制线条。


0
投票

是的,我正在死记硬背,但这个问题仍然很好并且相关,如果你在 legend() 的官方 R 文档中不认识它,那么很难在其他地方找到答案。

您可能想要使用的参数是

y.instersp
。这是
x.intersp
的伴随参数,“水平 (x) 间距的字符间距因子。”

尝试将其设置为 0.5 或 0.3。当我将其设置为小于 0.3 时,它会稍微压缩文本。

y.intersp = 0.5

y.intersp = 0.32; cex = 0.65

有人可能认为您可以通过缩小

cex
来“取消压缩”文本,但事实并非如此,因为
cex
只是缩放所有内容,而不仅仅是文本大小。因此,缩小
cex
会给你更小的文本,但仍然会被挤压。

您还可以通过设置

bty = "n"
来进一步减少对图形的干扰,这会消除图例的矩形边框并使图例区域对其后面的线条透明(正如我在第二个示例图像中所做的那样)。

legend("topleft",
       legend=c("Average Temperature",
                "SMA 10 years",
                "SMA 15 years",
                "SMA 20 Years"),
       text.col=c("black","red","mediumpurple","blue"),
       col=c("gray48","red","mediumpurple","blue"),
       cex=0.65,
       y.intersp = 0.32,
       bty = "n",
       lty=c(1,1,1,1))

我的来源是:https://www.rdocumentation.org/packages/graphics/versions/3.6.2/topics/legend

© www.soinside.com 2019 - 2024. All rights reserved.