首页 > 解决方案 > geom_density 在提供的美学方面是盲目的?

问题描述

我不得不承认,自从我使用 ggplot 以来已经有一段时间了,但这似乎有点傻。要么我在尝试制作密度图时遗漏了一些基本的东西,要么 ggplot2 (v3.3.2) 中存在错误

test <- data.frame(Time=rnorm(100),Age=rnorm(100))
ggplot(test,aes(y=Time,x=Age)) + 
  geom_density(aes(y=Time,x=Age))

生产

ggplot(测试,aes(y=时间,x=年龄))+

  • geom_density(aes(y=Time,x=Age)) 错误:geom_density 需要以下缺失的美学:y

'y'美学怎么会缺失?

标签: rggplot2aesthetics

解决方案


使用时有两种情况geom_density()。这取决于您指定的统计层:

  1. 标准情况是统计密度,它使 geom_density() 函数根据给定 x 值的频率分布计算其 y 值。在这种情况下,您不能证明是美学的,因为这些是在幕后计算的。
  2. 然后是第二种情况,这是您的情况,您必须通过将 stat 更改为identity来明确指定:如果由于某种原因,您已经预先计算了要直接输入密度函数的值,则需要这样做。

如果您混合使用案例 1) 和 2),就会出现问题。但我同意,错误消息不是很清楚,可以提及以确保使用的统计信息是所需的。

library(ggplot2)
test <- data.frame(time = rnorm(100), age = rnorm(100))
#if you want to use precalculated y values you have to change the used stat to identity:
ggplot(test) + 
  geom_density(aes(x = age, y = time), 
               stat = "identity")


# compared to the case with the default value of stat: stat = "density"

ggplot(test) + 
  geom_density(aes(x = age))

reprex 包(v0.3.0)于 2020 年 8 月 4 日创建


推荐阅读