我无法找到密度附近的双点文档
set.seed(1234)
df <- data.frame(cond = factor(rep(c("A","B"), each=200)), rating = c(rnorm(200),rnorm(200, mean=.8)))
print(head(df))
print(ggplot(df, aes(x=rating)) +
geom_histogram(aes(y=..density..), # Histogram with density instead of count on y-axis
binwidth=.5,
colour="black", fill="white") +
geom_density(alpha=.2, fill="#FF6666") +
geom_vline(aes(xintercept=mean(rating, na.rm=T)), # Ignore NA values for mean
color="red", linetype="dashed", size=1))
你知道他们代表什么算子吗?
修改
我知道做什么在geom中使用时,我想知道是什么。 例如,单点运算符定义为
> .
function (..., .env = parent.frame())
{
structure(as.list(match.call()[-1]), env = .env, class = "quoted")
}
<environment: namespace:plyr>
如果我重新定义密度,则 .. density .. 具有不同的效果,因此它似乎是XX - &gt; ..XX ..是一个运营商。我想知道它是如何定义的。
答案 0 :(得分:27)
与许多其他语言不同,在R中,点在标识符中完全有效。在这种情况下,..count..
是标识符。但是,ggplot2
中有特殊代码可以检测此图案并剥离点。真正的代码不太可能使用那样格式化的标识符,因此这是区分已定义和计算美学的一种巧妙方法。
相关代码位于layer.r:
的末尾# Determine if aesthetic is calculated
is_calculated_aes <- function(aesthetics) {
match <- "\\.\\.([a-zA-z._]+)\\.\\."
stats <- rep(FALSE, length(aesthetics))
grepl(match, sapply(aesthetics, deparse))
}
# Strip dots from expressions
strip_dots <- function(aesthetics) {
match <- "\\.\\.([a-zA-z._]+)\\.\\."
strings <- lapply(aesthetics, deparse)
strings <- lapply(strings, gsub, pattern = match, replacement = "\\1")
lapply(strings, function(x) parse(text = x)[[1]])
}
在map_statistic
函数中进一步使用它。如果存在计算的美学,则使用另一个数据框(包含例如count
列的数据框)用于绘图。
单点.
只是plyr
包中定义的另一个标识符。如您所见,它是一种功能。