我必须在 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))
我仍然遇到与上面解释的相同的问题。
减少
cex
调用中 legend
参数的值。您可以在cex=0.7
找到它。尝试 0.6 或 0.5(或更低),直到找到最佳尺寸。
如果这不起作用,另一种方法是使用参数
bty = "n"
完全删除图例周围的框。如果图例的背景挡住了图表中的线条,请在代码中向上移动 legend
命令,以便首先绘制它,然后在其上方绘制线条。
是的,我正在死记硬背,但这个问题仍然很好并且相关,如果你在 legend() 的官方 R 文档中不认识它,那么很难在其他地方找到答案。
您可能想要使用的参数是
y.instersp
。这是 x.intersp
的伴随参数,“水平 (x) 间距的字符间距因子。”
尝试将其设置为 0.5 或 0.3。当我将其设置为小于 0.3 时,它会稍微压缩文本。
有人可能认为您可以通过缩小
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