geom_density 提供的美学方面盲目?
geom_density blind in terms of the aesthetics supplied?
我不得不承认我已经有一段时间没有使用 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(test,aes(y=Time,x=Age)) +
- geom_density(aes(y=Time,x=Age))
Error: geom_density requires the following missing aesthetics: y
怎么会缺少'y'审美??
使用geom_density()
有两种情况。这取决于您指定的统计层:
- 标准情况是 stat density,它使 geom_density() 函数根据给定 x 值的频率分布计算其 y 值。在这种情况下,你不能证明你的审美,因为那些是在幕后计算的。
- 然后是第二种情况,这是您的情况,您必须通过将统计信息更改为 identity 来明确指定:如果出于某种原因,您需要这样做已经预先计算出您想要直接输入密度函数的值。
如果您混合使用情况 1) 和 2),就会出现问题。但我同意,错误消息不是很清楚,可以提及以确保使用的 stat 是所需的。
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 package (v0.3.0)
于 2020-08-04 创建
如果你想在图形中绘制两个变量,你需要先“融化”它。
test <- data.frame(Time=rnorm(100),Age=rnorm(100))
dt <- data.table(test)
dt_melt <- melt.data.table(dt)
ggplot(dt_melt,aes(x=value, fill=variable)) + geom_density(alpha=0.25)
我不得不承认我已经有一段时间没有使用 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(test,aes(y=Time,x=Age)) +
- geom_density(aes(y=Time,x=Age)) Error: geom_density requires the following missing aesthetics: y
怎么会缺少'y'审美??
使用geom_density()
有两种情况。这取决于您指定的统计层:
- 标准情况是 stat density,它使 geom_density() 函数根据给定 x 值的频率分布计算其 y 值。在这种情况下,你不能证明你的审美,因为那些是在幕后计算的。
- 然后是第二种情况,这是您的情况,您必须通过将统计信息更改为 identity 来明确指定:如果出于某种原因,您需要这样做已经预先计算出您想要直接输入密度函数的值。
如果您混合使用情况 1) 和 2),就会出现问题。但我同意,错误消息不是很清楚,可以提及以确保使用的 stat 是所需的。
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 package (v0.3.0)
于 2020-08-04 创建如果你想在图形中绘制两个变量,你需要先“融化”它。
test <- data.frame(Time=rnorm(100),Age=rnorm(100))
dt <- data.table(test)
dt_melt <- melt.data.table(dt)
ggplot(dt_melt,aes(x=value, fill=variable)) + geom_density(alpha=0.25)