cha*_*low 6 r function ggplot2 dataframe
我是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))
Run Code Online (Sandbox Code Playgroud)
我想为曲线的特定区域着色,因此使用Internet创建了如下函数:
funcShaded <- function(x) {
y = dnorm(x, mean = m, sd = std)
y[x < score] <- NA
return(y)
}
Run Code Online (Sandbox Code Playgroud)
然后用
p + stat_function(fun = funcShaded, geom="area", fill="#84CA72", alpha=.2)
这可以创建我想要的图形。但是,我对此有2个问题。首先,当我分解代码时
data.frame(x = c(300, 2700))
Run Code Online (Sandbox Code Playgroud)
如您所料,创建了一个两个项目的数据框,因此如何将其用于创建x轴值,并进一步传递给要适当使用的函数(读取它,就像它是值列表一样)?
其次,我现在想稍后再使用此函数,以根据不同的分数(例如score2 = 1630)填充曲线下的其他区域,并认为我可以添加另一个变量funcShaded以传递分数(即funcShaded <- function(x, score))然后stat_function按如下方式调用我的函数:p + stat_function(fun = funcShaded(x, score2), ...)但:
x从未使用此代码明确“创建” 该变量,因为它没有显示在我的环境中,并且当我尝试该代码时出现错误:找不到对象“ x”因此,我想我很好奇“ x”在这种情况下的工作方式,以及我是否应该根据自己的意愿以不同的方式创建它。
ali*_*ire 10
传递给该函数的函数stat_function必须是未调用的(除非它返回另一个函数;类似adverb之类的副词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))
Run Code Online (Sandbox Code Playgroud)

另外,您无需编写自己的函数,也可以使用stat_function的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))
Run Code Online (Sandbox Code Playgroud)
至于如何stat_function使用传递到x美学中的值,它使用它们作为在值网格之间进行插值的极限,值网格的数量由其n参数设置,默认为101。这与大多数方法肯定是不同的用法stats,但这是一个非常有用的功能。