R 将当前cex.lab值传递给另一个函数;指定文本行之间的距离
问题1:假设我有一个类似下面的函数,它允许我在x轴下绘制线条,也可以打印多行文本对不起,这是我能想到的最简单的代码。我愿意接受任何关于如何使它更整洁的建议!。当x轴下方有多行文字时,它可能会与x轴标签重叠。所以我决定使用多行文字来绘制x轴标签R 将当前cex.lab值传递给另一个函数;指定文本行之间的距离,r,axis-labels,R,Axis Labels,问题1:假设我有一个类似下面的函数,它允许我在x轴下绘制线条,也可以打印多行文本对不起,这是我能想到的最简单的代码。我愿意接受任何关于如何使它更整洁的建议!。当x轴下方有多行文字时,它可能会与x轴标签重叠。所以我决定使用多行文字来绘制x轴标签 Sampleplot = function(x, text, xlab = NULL,...){ if(!is.null(text)){ text.n=length(text) #Number of lines of t
Sampleplot = function(x, text, xlab = NULL,...){
if(!is.null(text)){
text.n=length(text) #Number of lines of text
text.n2=length(text[[1]]) #Number of words. Here I am assuming equal number in
#each list item
text.n=rep(1:text.n, each=text.n2)
matplot(x, axes = FALSE,...)
axis(2)
axis(1, labels = FALSE,at = 1:text.n2)
args.mtext=c(mtext, list(text=unlist(text),
line=text.n, at=1:text.n2, side=1))
mtext(xlab, line=max(text.n+1.5), side=1)
invisible(do.call(mapply, args.mtext))
}else matplot(x,...)
}
#Dataset and texts
dataset = cbind(sort(rlnorm(4)),sort(rlnorm(4)),sort(rlnorm(4)))
texts = list(letters[1:4], 1:4, letters[11:14])
#Sample plot:
par(mar=c(10,6,4,2))
Sampleplot(dataset, texts, xlab = "This is the label for x-axis",
type="b", pch=1)
现在,假设我想增加标签大小:
Sampleplot(dataset, texts, xlab = "This is the label for x-axis",
type="b", pch=1, cex.lab=3)
当然,这对x轴标签没有任何作用,因为它不是使用matplot创建的,而是使用多行文字创建的
一种可能的解决方案是使cex.lab成为函数中的显式参数,并将其添加到matplot中
Sampleplot2 = function(x, text, xlab = NULL, cex.lab = NULL, ...){ #<- HERE!!
if(is.null(cex.lab)) cex.lab = 1
if(!is.null(text)){
text.n=length(text) #Number of lines of text
text.n2=length(text[[1]]) #Number of words. Here I am assuming equal number in
#each list item
text.n=rep(1:text.n, each=text.n2)
matplot(x, axes = FALSE, cex.lab=cex.lab,...) #<- HERE!
axis(2)
axis(1, labels = FALSE,at = 1:text.n2)
args.mtext=c(mtext, list(text=unlist(text),
line=text.n, at=1:text.n2, side=1))
mtext(xlab, line=max(text.n+1.5), side=1, cex=cex.lab) #<- HERE!
invisible(do.call(mapply, args.mtext))
}else matplot(x,...)
}
par(mar=c(10,6,4,2))
Sampleplot2(dataset, texts, xlab = "This is the label for x-axis",
type="b", pch=1, cex.lab=2)
然而,这个解决方案似乎远远不够优雅。因此,我想知道是否有任何方法可以传递cex.lab值,而不必显式地将其放入函数定义中。我尝试使用par$cex.lab,但与par$mar不同,par$cex.lab提供了当前的保证金状态,par$cex.lab似乎只提供了默认的标签大小,即1
问题2:正如你在我的情节中所看到的,不同文本行之间的间距有点大。我想知道是否有任何方法可以测量文本的高度,并且我可以使用高度来决定不同文本行之间的空间应该有多宽
提前谢谢你们如果你只关心X标签的重叠,为什么不使用PAR来调整你的绘图区域的边距,从而给你更多的空间来写你的文字?顺便说一句,par$name为您提供所述参数的当前值。如果你设置了parcex。lab@CarlWitthoft我考虑只使用mar=。但我还没有弄清楚所需的边距和x轴以下字体大小之间的关系。我正在努力使这段代码成为我日常工作的一部分。因此,我希望脚本能够根据文本行数、文本字体大小以及x轴标签大小来确定底部边距,而不是检查底部边距的宽度。另外,关于par$名称,我在使用它时得到空值。嗯..这对确定文本占用的空间有帮助吗?看看前几天的问题:@thelatemail真棒!这正是我要找的。谢谢