当我使用geom_density_ridges()
时,该图通常最终显示出数据中不存在的长尾部值。
这是一个例子:
library(tidyverse)
library(ggridges)
data("lincoln_weather")
# Remove all negative values for "Minimum Temperature"
d <- lincoln_weather[lincoln_weather$`Min Temperature [F]`>=0,]
ggplot(d, aes(`Min Temperature [F]`, Month)) +
geom_density_ridges(rel_min_height=.01)
如您所见,一月,二月和十二月都显示负温度,但是数据中根本没有负值。
当然,我可以在x轴上添加限制,但这不能解决问题,因为它会截断现有的错误密度。
ggplot(d, aes(`Min Temperature [F]`, Month)) +
geom_density_ridges(rel_min_height=.01) +
xlim(0,80)
现在该图使它看起来像一月和二月的零值(没有)。这也使得看起来12月经常发生0度,而实际上只有1天。
我怎样才能解决这个问题?
最佳答案
一种选择是使用stat_density()
而不是stat_density_ridges()
。 stat_density()
不能执行某些操作,例如绘制垂直线或覆盖点,但是在另一方面,它可以执行stat_density_ridges()
不能执行的某些操作,例如将分布范围调整为数据范围。
# Remove all negative values for "Minimum Temperature"
d <- lincoln_weather[lincoln_weather$`Min Temperature [F]`>=0,]
ggplot(d, aes(`Min Temperature [F]`, Month, group = Month, height = ..density..)) +
geom_density_ridges(stat = "density", trim = TRUE)
作为替代方案,您可以画点地毯,也许可以或多或少地满足您的目的:
ggplot(d, aes(`Min Temperature [F]`, Month)) +
geom_density_ridges(rel_min_height = 0.01, jittered_points = TRUE,
position = position_points_jitter(width = 0.5, height = 0),
point_shape = "|", point_size = 2,
alpha = 0.7)
注意:这两种方法目前无法结合使用,这需要对统计代码进行一些修改。
关于r - 阻止geom_density_ridges显示不存在的尾部值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49906240/