我创建了一个直方图/密度图函数,我希望对y轴进行计数而不是密度,但是在参数化其binwidth时遇到了问题。
我使用基于http://docs.ggplot2.org/current/geom_histogram.html的示例来说明我的尝试。
这是成功的plotMovies1函数。我按照引用的url来制作y轴..count ..而不是..density ..请注意,它在两个地方使用了硬编码的.5 binwidth,这就是我要参数化的...
# I want y axis as count, rather than density, and followed
# https://stat.ethz.ch/pipermail/r-help/2011-June/280588.html
plotMovies1 <- function() {
m <- ggplot(movies, aes(x = rating))
m <- m + geom_histogram(binwidth = .5)
m <- m + geom_density(aes(y = .5 * ..count..))
}
我的第一次,未能在在本地BW参数化binwidth天真尝试plotMovies2 ...
# Failed first attempt to parameterize binwidth
plotMovies2 <- function() {
bw <- .5
m <- ggplot(movies, aes(x = rating))
m <- m + geom_histogram(binwidth = bw)
# Error in eval(expr, envir, enclos) : object 'bw' not found
m <- m + geom_density(aes(y = bw * ..count..))
}
> print(plotMovies2())
Error in eval(expr, envir, enclos) : object 'bw' not found
我看讨论关于通过当地的环境,在ggplot AES在https://github.com/hadley/ggplot2/issues/743,但plotMovies3也无法以同样的方式,未能找到BW对象...
# Failed second attempt to parameterize binwidth, even after establishing
# aes environment, per https://github.com/hadley/ggplot2/issues/743
plotMovies3 <- function() {
bw <- .5
m <- ggplot(movies, aes(x = rating), environment = environment())
m <- m + geom_histogram(binwidth = bw)
# Error in eval(expr, envir, enclos) : object 'bw' not found
m <- m + geom_density(aes(y = bw * ..count..))
}
> print(plotMovies3())
Error in eval(expr, envir, enclos) : object 'bw' not found
我终于尝试设置一个全球性的,但它仍然无法找到对象...
# Failed third attempt using global binwidth
global_bw <<- .5
plotMovies4 <- function() {
m <- ggplot(movies, aes(x = rating), environment = environment())
m <- m + geom_histogram(binwidth = global_bw)
# Error in eval(expr, envir, enclos) : object 'global_bw' not found
m <- m + geom_density(aes(y = global_bw * ..count..))
}
> print(plotMovies4())
Error in eval(expr, envir, enclos) : object 'global_bw' not found
给定plotMovies3和plotMovies4,我想这不是一个直接的环境问题。谁能阐明我该如何解决?同样,我的目标是能够创建直方图/密度图函数
绝对不是很漂亮,但是如果您需要解决方法,可以使用常规density
功能
plotMovies5 <- function(binw=0.5) {
m <- ggplot(movies, aes(x = rating))
m <- m + geom_histogram(binwidth = binw)
wa <- density(x=movies$rating, bw = binw)
wa <- as.data.frame(cbind(xvals = wa$x, yvals = wa$y * wa$n * binw))
m <- m + geom_point(data = wa, aes(x = xvals, y = yvals))
}
print(plotMovies5(binw=0.25))
请注意,由于密度估计值并不完全相等,因此您仍需要对变量进行修补,如下所示:
binw = 0.5
m <- ggplot(movies, aes(x = rating))
m <- m + geom_density(aes(y = 0.5 * ..count..))
wa <- density(x=movies$rating, bw = binw)
wa <- as.data.frame(cbind(xvals = wa$x, yvals = wa$y * wa$n * binw))
m <- m + geom_point(data = wa, aes(x = xvals, y = yvals))
m
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句