geom_density不scale_y_log10正确填写(geom_density doesn&

2019-10-22 07:08发布

码:

require(ggplot2)
set.seed(0)
xvar <- rnorm(100)
ggplot(data.frame(xvar), aes(xvar)) + geom_density(fill="lightblue") + scale_y_log10()

该图是这样的:

我怎样才能让上(即下文)密度估计的右侧的图表树荫?

Answer 1:

的问题是, stat_density缺省密度和填充之间y=0线变换后的数据的。 这样改变在Y转换= 0线将牺牲品这类问题。 我个人认为这是一个错误ggplot2 ,虽然因为图形语法专家们可能会认为,Y型转化的密度是没有意义的,这个错误可能不会得到很多的关注。

一个非常缺憾解决方法是手动加一个偏移量..density.. ,你将必须显式调用,然后更改休息,以使它看起来像你没做什么奇怪的。

require(ggplot2)
require(scales)
set.seed(0)
xvar <- rnorm(100000)
quartz(height=4,width=6)
ggplot(data.frame(xvar), aes(x=xvar, y=log10(..density..)+4)) + 
    geom_density(fill='lightblue') +
    scale_y_continuous(breaks=c(0,1,2,3,4), 
        labels=c('0.0001', '0.001', '0.01', '0.1','1'), limits=c(0,4),
        name='density')
quartz.save('![StackOverflow_29111741_v2][1].png')

该代码生成此图表:



Answer 2:

这不是一个ggplot2甚至是R问题,但仅仅是一个概率分布的尾部的一个问题被欠你的样本量。 日志轴可以永远走下来,以无限长的时间“达到”零,但没有有限的样本量能指望覆盖分布越来越不可能的区域。

因此,为了使情节漂亮,你需要在两个(一)增加点的数量从100至10,000或更高,而(B)保持情节ylim S也是一样的。 (否则你在绘制额外的数据rnorm通话将填充高斯甚至远离均值远的尾部,有说服力的ggplot2进行自动y轴的限制甚至更低,在不良采样尾巴的范围,吵闹你不喜欢会回来。)

require(ggplot2)
require(scales)
set.seed(0)
xvar <- rnorm(100000)
ggplot(data.frame(xvar), aes(xvar)) + 
    geom_density(fill="lightblue") + 
    scale_y_continuous(trans=log10_trans(), limits = c(0.01, 1))

这产生了这个情节,我认为这是你想要的。



文章来源: geom_density doesn't fill correctly with scale_y_log10