与其他geom_vline
几何图形相比,ggplot
似乎在颜色美学上表现不正确。我试图弄清楚我是不是对geom_vline
有误解,还是这是对geom_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_vline
语句具有相同的作用)。# Separate density plots of x for each level of y
ggplot(data=dat) +
geom_density(aes(x=x, colour=y)) +
geom_vline(aes(xintercept=median(x)), lwd=4, colour="black") +
geom_vline(aes(xintercept=median(x), colour=y), lwd=1)
# Density plot of x, faceted by level of y
ggplot(data=dat) +
geom_density(aes(x=x, colour=y)) +
geom_vline(aes(xintercept=median(x)), lwd=4, colour="black") +
geom_vline(aes(xintercept=median(x), colour=y), lwd=1) +
facet_grid(. ~ y)
看来
geom_vline
的行为方式与通常的ggplot
逻辑所预期的不同。例如,如上所示,我可以将数据exp(x)
的函数传递给geom_density
,并且当包含色彩美感时,它针对y
的每个级别返回单独的密度图。另外,只要没有颜色美感,我就可以将数据的函数exp(x)
或median(exp(x))
传递给geom_vline
,它的行为也与预期的一样。但是,当我尝试对geom_vline
使用颜色美学或刻面时,它无法为colour
变量的每个级别提供单独的中位数线,而是为所有x
值的中位数添加单行。我知道我可以将预先汇总的数据传递给
geom_vline
以获得我想要的行为(实际上,回答this SO question是引发此处讨论的问题的原因),但是我试图了解在此过程中是否确实存在不一致之处geom_vline
相对于其他ggplot
几何的行为。我是否缺少某些东西?或者
geom_vline
的行为是否与其他ggplot
几何不同? 最佳答案
“但是实际上,它只是在x的所有值的中位数处增加了一行。”
正确,您要获取所有x
值的中位数,这只是一个数字。换句话说,median(x)
是在整个数据集而不是每个组上进行评估的。您可以通过使用geom_point
而不是geom_vline
的更简单的图看到相同的行为:
qplot(x, median(x), color=y, data=dat)
关于r - geom_vline的行为是否与其他ggplot几何的行为不一致?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42727403/