R 图中的双点

R 图中的双点,r,ggplot2,R,Ggplot2,我找不到密度周围双点的文档 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 den

我找不到密度周围双点的文档

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))
set.seed(1234)
df。
函数(…,.env=parent.frame())
{
结构(如.list(match.call()[-1]),env=.env,class=“quoted”)
}

如果我重新定义密度,那么..密度。。有不同的效果,所以看起来是XX->…XX。。他是个接线员。我想知道它是如何定义的。

与许多其他语言不同,在R中,点在标识符中是完全有效的。在本例中,
.count..
是一个标识符。但是,
ggplot2
中有专门的代码来检测此图案,并去除圆点。真正的代码不太可能使用这样格式的标识符,所以这是区分定义的和计算的美学的一种简洁方法

相关代码位于:

#确定是否计算美学

是计算出来的吗?这是
ggpolot2
自己内部计算值的信号,而不是在工作区中查找值。是的,我看到了效果。我可以用……伯爵……代替。。为了得到规则的直方图。但我想知道,作为一种语言结构,它到底是什么。如果我重新定义影响绘图的函数“密度”,那么有趣的x->…x。。操作员是否独自阅读
?stat_bin
对这个问题没有提供任何见解这是一个很好的教程,但我也想知道同样的事情。好问题。从ggplot2 3.3.0开始,
.var..
变量被
after_stat()
function.awesome替代。这就是基于反射的魔法。很高兴知道,因为我想象它在一些R库中代表了一个完整的模式,并在ggplot中提供了一个有文档记录的入口点。@nicolas:我不确定“反射”一词是否适用于这里
ggplot2
只是查看数据并在数据以某种方式格式化时采取不同的操作。绑定不是静态的,而是根据某些属性动态计算的。可能不是反射,但看起来很接近。在ggplot2包中,双点方法将被
calc()
函数所取代。您可以使用
calc(density)
,而不是使用
.density..
来指示要使用继承美学的密度。我不相信这是在发行版的写作这一评论。事实上,我只是偶然发现了这个。他们在GGPLOT23中将
calc
函数重命名为
stat
(这似乎是一个更合适的名称)
> .
function (..., .env = parent.frame()) 
{
    structure(as.list(match.call()[-1]), env = .env, class = "quoted")
}
<environment: namespace:plyr>
# 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]]) 
}