与其他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/

10-13 08:07