R 将当前cex.lab值传递给另一个函数;指定文本行之间的距离

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

问题1:假设我有一个类似下面的函数,它允许我在x轴下绘制线条,也可以打印多行文本对不起,这是我能想到的最简单的代码。我愿意接受任何关于如何使它更整洁的建议!。当x轴下方有多行文字时,它可能会与x轴标签重叠。所以我决定使用多行文字来绘制x轴标签

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:正如你在我的情节中所看到的,不同文本行之间的间距有点大。我想知道是否有任何方法可以测量文本的高度,并且我可以使用高度来决定不同文本行之间的空间应该有多宽


提前谢谢你们