r - 仅使用 plotly::ggplotly 兼容的几何图形将箱形图放置在多面图的边缘
问题描述
我正在制作一个函数,通过 ggplotly 函数为任何给定的数据集创建一个 plotly雨云图。其中大部分非常简单,但箱线图覆盖不起作用。
我目前最好的尝试是这样的:
raincloud <- ggplot2::ggplot(data = iris) +
ggplot2::geom_density(mapping = ggplot2::aes(x = Sepal.Length,
fill = Species,
colour = NA),
alpha = .85) +
ggplot2::geom_rug(mapping = ggplot2::aes(x = Sepal.Length,
colour = Species),
size = 1,
alpha = .6) +
ggplot2::geom_boxplot(mapping = ggplot2::aes(x = Sepal.Length,
y = -.1,
fill = Species,
colour = Species),
width = 0.2,
alpha = .3) +
ggplot2::facet_grid(rows = 'Species') +
ggplot2::theme_minimal()
raincloud
plotly::ggplotly(raincloud)
这种方法有两个主要问题:
- 箱线图被人为地放置在绘图区域内,而不是边缘。而且因为我将它设置为 fixed
y
和 fixedwidth
,它可以与密度重叠或在其下方看起来很小,具体取决于分布的高度。这就是为什么我得出结论,我需要把它放在地块边缘,在 geom_rug 上。
- 生成ggplotly时,箱形图就消失了,只留下一条虚线,就好像它是另一个geom_rug一样。我知道 plotly 有 boxplot 支持,但也许水平 + faceted 的组合对于它的翻译来说太过分了。
我坚持强调需要它与情节兼容,因此来自的自定义几何图形等不是一种选择,因为 ggplotly 的翻译器不支持它们ggdist
。ggExtra
解决方案
我现在在我的包编年史中完全实现了这一点。我必须使用geom_segment()
和手动绘制箱线图的所有线条和矩形geom_rect()
library(chronicle)
make_raincloud(dt = iris,
value = 'Sepal.Length',
groups = 'Species')
推荐阅读
- html - Vue-如何更改不同组件中相同元素的样式
- json - Spark scala 数据类型不匹配
- ios - AFNetworking responseObject 包含十六进制 - 我该如何检查?
- python - 在数据框中缺少功能的地方将 Nan 替换为 0
- javascript - 带有 React Navigation 的 Drawer Navigation 屏幕上的选项卡
- python-3.x - 未知输入的总和和平均值,并在输入为“done”之类的字符串时返回结果。蟒蛇 3
- html - 我该如何改变
php元素样式 - javascript - 使用 jQuery 在焦点上突出显示输入字段的内容
- jquery - 在动画开始之前而不是结束时应用 div CSS
- sql - 使用表列值之一创建额外的总和列