我在ggplot2
中绘制多个组的密度,每个组都有不同的支持。出于这个原因,我希望密度线停在相应组的最小/最大值处,以直观地传达支持的差异。我可以用ggvis
做到这一点,请参阅:
x1c 0d1x的数据
但是,我不能很好地使用geom_density()
来做到这一点:
- 默认情况下(
trim=FALSE
)geom_density()
会将线的密度延伸到0,这样所有的密度都在0重叠,很难比较支持度 - 设置
trim=TRUE
、geom_density()
不会将线延伸到相应支撑之外,但会在y轴上修剪线。
如何用ggplot::geom_density
模拟ggvis
图?
代码
library(tidyverse)
library(ggvis)
#>
#> Attaching package: 'ggvis'
#> The following object is masked from 'package:ggplot2':
#>
#> resolution
library(patchwork)
df <- tibble(x1=truncnorm::rtruncnorm(500, -1, 1),
x2=truncnorm::rtruncnorm(500, -1.5, 1.5),
x3=rnorm(500)) %>%
gather(variable, value, everything())
pl_gg_trim <- ggplot(df, aes(x=value, color=variable))+
geom_density(trim=TRUE) +
ggtitle("trim=TRUE: lines don't go to 0")
pl_gg_notrim <- ggplot(df, aes(x=value, color=variable))+
geom_density()+
ggtitle("trim=FALSE: hard to understand support of values")
pl_ggvis <- ggvis(df, ~value, fill = ~variable) %>%
group_by(variable) %>%
layer_densities()
#does not work with reprex: pl_ggvis
pl_gg_notrim/pl_gg_trim
字符串
的
创建于2021-03-31由reprex package(v1.0.0)
2条答案
按热度按时间2hh7jdfx1#
一种解决方法是使用基本的
density
函数,并将其绘制为geom_line
:字符串
x1c 0d1x的数据
创建于2021-03-31由reprex package(v1.0.0)
ep6jt1vc2#
在ggplot 3.3.0(参见news)中,现在有一个新的
outline.type
参数,用于控制如何绘制笔划。设置
outline.type = "full"
将使密度点的端点归零,但代价是x轴上现在有一条线连接两个点。字符串
x1c 0d1x的数据
创建于2023-10-31使用reprex v2.0.2