我是R中的一个重要的初学者,我很困惑ggplot在创建普通曲线时如何使用变量“x”。
我的情况是这样的。我试图在给定特定方法和标准偏差的情况下绘制正态曲线,并且在没有数据的情况下,我看到的最常见的方法如下:
score = 1800
m = 1500
std = 300
ggplot(data.frame(x = c(300, 2700)), aes(x = x)) + stat_function(fun =
dnorm, args = list(mean = m, sd = std)) + scale_x_continuous(name
= "Score", breaks = seq(300, 2700, std))
我想要对曲线的特定区域进行着色,以便使用Internet创建一个函数,如下所示:
funcShaded <- function(x) {
y = dnorm(x, mean = m, sd = std)
y[x < score] <- NA
return(y)
}
然后在我的曲线上添加了一个图层
p + stat_function(fun = funcShaded, geom="area", fill="#84CA72", alpha=.2)
这可以创建我想要的图形。但是,我有两个问题。首先,当我打破代码时
data.frame(x = c(300, 2700))
创建一个两项数据框,正如您所期望的那样,它如何能够用于创建x轴值,并进一步传递给要正确使用的函数(读取。就好像它是一个列表值)?
其次,我现在想要稍后重新使用此功能,根据不同的分数(例如score2 = 1630
)填充曲线下的其他区域,并且我想我可以将另一个变量添加到{{1} }通过分数(即funcShaded
然后按以下方式调用我的funcShaded <- function(x, score))
:stat_function
但是:
p + stat_function(fun = funcShaded(x, score2), ...)
变量从未使用此代码显式“创建”,因为它不会显示在我的环境中,当我尝试此代码时,我得到错误:对象'x'不是结果 所以我想我只是好奇'x'在这种情况下是如何工作的,如果我应该按照我想要的方式创造它。
答案 0 :(得分:4)
传递给stat_function
的函数必须是未调用的(除非它返回另一个函数;像purrr::partial
这样的副词是另一种方法),因为stat_function
需要传递它x
值的向量。
您已使用dnorm
完成了funcShaded
所需的操作:通过args
传递其他固定参数:
library(ggplot2)
score = 1800
m = 1500
std = 300
funcShaded <- function(x, lower_bound) {
y = dnorm(x, mean = m, sd = std)
y[x < lower_bound] <- NA
return(y)
}
ggplot(data.frame(x = c(300, 2700)), aes(x = x)) +
stat_function(fun = dnorm, args = list(mean = m, sd = std)) +
stat_function(fun = funcShaded, args = list(lower_bound = score),
geom = "area", fill = "#84CA72", alpha = .2) +
scale_x_continuous(name = "Score", breaks = seq(300, 2700, std))
或者,如果不编写自己的函数,您可以使用stat_function
的{{1}}参数执行相同的操作:
xlim
至于ggplot(data.frame(x = c(300, 2700)), aes(x = x)) +
stat_function(fun = dnorm, args = list(mean = m, sd = std)) +
stat_function(fun = dnorm, args = list(mean = m, sd = std), xlim = c(score, 2700),
geom = "area", fill = "#84CA72", alpha = .2) +
scale_x_continuous(name = "Score", breaks = seq(300, 2700, std))
如何使用传递到其stat_function
美学中的值,它将它们用作插值值网格的限制,其值由x
设置参数,默认为101.它绝对是一个与大多数n
不同的用法,但它是一个非常有用的功能。