Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 几何图形的行为是否与其他几何图形的行为不一致?_R_Ggplot2 - Fatal编程技术网

R 几何图形的行为是否与其他几何图形的行为不一致?

R 几何图形的行为是否与其他几何图形的行为不一致?,r,ggplot2,R,Ggplot2,与其他ggplotgeom相比,geom\u vline在色彩美学方面似乎表现得“不恰当”。我正在试图弄清楚我是否对geom\u vline有误解,或者这是否是geom\u vline设计中的疏忽 # Fake data for illustration dat=data.frame(x=rnorm(60), y=rep(LETTERS[1:3],20)) 所有这些工作如预期的那样: # Density plot of x with vertical median line ggplot(da

与其他
ggplot
geom相比,
geom\u vline
在色彩美学方面似乎表现得“不恰当”。我正在试图弄清楚我是否对
geom\u vline
有误解,或者这是否是
geom\u vline
设计中的疏忽

# Fake data for illustration
dat=data.frame(x=rnorm(60), y=rep(LETTERS[1:3],20))
所有这些工作如预期的那样:

# Density plot of x with vertical median line
ggplot(data=dat) + 
  geom_density(aes(x=x)) + 
  geom_vline(aes(xintercept=median(x)))

# Density plot of exp(x) with vertical median line
ggplot(data=dat) + 
  geom_density(aes(x=exp(x))) +
  geom_vline(aes(xintercept=median(exp(x))))

# Separate density plots of exp(x) for each level of y
ggplot(data=dat) + 
  geom_density(aes(x=exp(x), colour=y))

但是,下面的图的工作方式不同。我希望下面图中的第二条
geom_vline
语句为
y
的每一层包含一条单独的中线。但事实上,它只是在
x
的所有值的中位数处加一行(这一事实表明,它与第一条
geom\u vline
语句的作用相同)

似乎
geom_vline
的行为与通常的
ggplot
逻辑不同。例如,如上所示,我可以将数据的函数,
exp(x)
传递到
geom_density
,当包含颜色美学时,它会为
y
的每个级别返回单独的密度图。此外,只要没有色彩美感,我就可以将数据的函数,
exp(x)
median(exp(x))
传递到
geom\u vline
,它的行为也符合预期。但是,当我尝试使用带有
geom_vline
的色彩美学或镶嵌面时,它无法为
color
变量的每个级别提供单独的中间线,而是为所有
x
值的中间线添加一条线

我知道我可以将预先汇总的数据传递给
geom\u vline
,以获得我想要的行为(事实上,回答是这里讨论的问题的根源),但我试图了解
geom\u vline
相对于其他
ggplot
geom的行为是否存在实际的不一致性

我是否遗漏了什么,或者是
geom\u vline
的行为真的与其他
ggplot
geom不同?

“但事实上,它只是在x的所有值的中位数处添加了一行。”

对,你要取的是
x
的所有值的中位数,它只是一个数字。换句话说,
中位数(x)
是在整个数据集上评估的,而不是针对每个组。您可以通过使用
geom\u point
而不是
geom\u vline
的简单绘图看到相同的行为:

qplot(x, median(x), color=y, data=dat)

当我看到您的示例时,我立即想到我应该使用
stat\u summary
geom=“vline”
来获得每个
y
级别的垂直中线,但结果是,因此,您必须在
ggplot
之外进行汇总,然后将汇总数据框传递给
geom\u vline
。这也是我的本能,我发现了同样的讨论。哦,好吧!
qplot(x, median(x), color=y, data=dat)