【问题标题】:Add text to plots created with a function in r将文本添加到使用 r 中的函数创建的绘图
【发布时间】:2012-09-11 14:21:06
【问题描述】:

我使用函数创建了一个包含两个图的图形,即

data1<-1:3

basic<-function(data1){
par(mfrow=c(2,1))
plot(data1)
plot(data1)
}

basic(data1)

现在我想在绘图中添加文本,而不必将其包含在函数中。但我只能在底部绘图中添加文本(见下文)。

text(x=c(1.5,1.6,1.7),y=c(2,2.1,2.2), labels=c("X","Y","Z"))

如何在函数之外的顶部绘图中添加文本? (我有很多使用相同功能创建的图形,但需要在每个图形的稍微不同的位置放置略有不同的文本标签)。感谢您的建议。

【问题讨论】:

  • 调用情节的那一刻,您将焦点切换到第二个情节。只需在调用第二个情节之前添加您的text()

标签: r function text plot


【解决方案1】:

为此,您可以使用函数split.screen 而不是par(mfrow=...)layout

split.screen(c(2,1)) # Two rows of plots, one column.

然后您可以使用函数screen 从一个“屏幕”切换到另一个“屏幕”。请参阅?split.screen 了解更多信息。

在您的示例中提供以下内容:

basic <- function(data1){
    split.screen(c(2,1))
    screen(1)
    plot(data1)
    screen(2)
    plot(data1)
    }

basic(data1)
screen(1, new=FALSE)
text(x=c(1.5,1.6,1.7),y=c(2,2.1,2.2), labels=c("X","Y","Z"))

【讨论】:

    【解决方案2】:

    这是使用par 命令的一种方法:

    data1 <- 1:3
    
    basic <- function(data1) {
        out <- list()
        par(mfrow=c(2,1))
    
        plot(data1)
        out[[1]] <- par(no.readonly=TRUE)
    
        plot(data1)
        out[[2]] <- par(no.readonly=TRUE)
    
        invisible(out)
    }
    
    pars <- basic(data1)
    
    
    par(pars[[1]])
    par(mfg=c(1,1))
    text( x=c(1.5,1.6,1.7), y=c(2,2.1,2.2), labels=c("X","Y","Z") )
    
    par(pars[[2]])
    par(mfg=c(2,1))
    text( x=c(1.5,1.6,1.7), y=c(2,2.1,2.2), labels=c("A","B","C") )
    
    par(pars[[1]])
    par(mfg=c(1,1))
    text( x=c(1.7,1.6,1.5), y=c(2,2.1,2.2), labels=c("X","Y","Z") )
    
    par(pars[[2]])
    par(mfg=c(2,1))
    text( x=c(1.7,1.6,1.5), y=c(2,2.1,2.2), labels=c("A","B","C") )
    

    【讨论】:

    • +1 太棒了!我知道有一个 par 参数正在执行此操作,但找不到它。
    【解决方案3】:

    您可以首先概述不同的文本是什么,例如

    data1<-1:3
    
    text1 <- data.frame(x=c(1.5,1.6,1.7),y=c(2,2.1,2.2), labels=c("X","Y","Z"))
    text2 <- data.frame(x=c(2,2.9,1.0),y=c(2,2.1,2.2), labels=c("X","Y","Z"))
    

    然后将它们放入你的函数中

    basic<-function(data1){
    par(mfrow=c(2,1))
    plot(data1)
    text(text1)
    plot(data1)
    text(text2)
    }
    
    basic(data1)
    

    正如@Andrie 所说,调用 plot 意味着任何进一步的 text() 调用将仅适用于最后一个情节

    【讨论】:

    • 嗯...所以没有真正的方法可以解决我需要在函数中添加文本的事实。然后,如果我按照您的建议使用 data.frames,这应该不会那么困难......也许只是有点繁琐。谢谢!
    • @Elizabeth 为什么不在你的函数中包含另一个参数,它将标题传递给特定的情节?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 2019-04-28
    相关资源
    最近更新 更多