gpt4 book ai didi

R + ggplot : geom_txt label not recognize a variable in function call

转载 作者:行者123 更新时间:2023-12-05 00:59:45 28 4
gpt4 key购买 nike

我是从 MatLab 切换过来的 R/ggplot 新手。

我想使用 ggplot 创建一个函数,并在图形上打印线性回归方程(在 Adding Regression Line Equation and R2 on graph 中讨论)。但是在这里,我试图用它构建一个函数但没有成功。

我一直收到错误 -
“eval(expr,envir,enclos)中的错误:找不到对象'标签'”。

一种解决方法是在函数之外定义“标签”变量,但我不明白为什么这不起作用。

谁能解释为什么?

df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)

f <- function(DS, x, y, z) {
label <- z
print(label)

ggplot(DS, aes(x=x, y=y)) +
geom_point() +
labs(y=y) +
labs(title=y) +
xlim(0,5)+
ylim(0,5)+
geom_smooth(method="lm", se=FALSE)+
geom_text (aes(x=1, y=4, label=label))
}

f(df, x, y, "aaa") #execution line

最佳答案

请参阅以下代码:

library(ggplot2)
df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
f <- function(DS, x, y, z) {
label.df = data.frame(x=1, y=4, label=z)
ggplot(DS, aes_string(x=x, y=y)) +
geom_point() +
labs(y=y) +
labs(title=y) +
geom_smooth(method="lm", se=FALSE)+
geom_text (aes(x=x, y=y, label=label), label.df)
}

f(df, "x", "y", "aaa")

对您的代码进行了一些修复:
  • 您在 geom_text 中使用的数据与您在 ggplot() 中定义的相同除非你改变它。这里我创建了一个临时data.frame为此目的称为 label.df .
  • xlim()ylim()函数正在过滤您的大部分数据点,因为范围是 xy远大于您在原始代码中定义的限制。
  • 当您想传递 data.frame 的列名时要用于显示图形,将它们的名称作为字符串传递会更容易(即 "x" )。这样,aes()功能也改为aes_string() .

  • 结果如下:
    enter image description here

    编辑
    感谢@Gregor,一个更简单的版本是:
    f <- function(DS, x, y, z) {
    ggplot(DS, aes_string(x=x, y=y)) +
    geom_point() +
    labs(y=y) +
    labs(title=y) +
    geom_smooth(method="lm", se=FALSE)+
    annotate(geom="text", x=1, y=4, label=z)
    }

    关于R + ggplot : geom_txt label not recognize a variable in function call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30269619/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com