【问题标题】:Place box plots on the margins of a faceted plot with only plotly::ggplotly compatible geoms仅使用 plotly::ggplotly 兼容的几何图形将箱形图放置在多面图的边缘
【发布时间】:2021-05-31 14:45:56
【问题描述】:

我正在创建一个函数,通过 ggplotly 函数为任何给定的数据集创建一个 plotly raincloud plot。其中大部分都非常简单,但箱线图覆盖不起作用。

我目前最好的尝试是这样的:

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)

这种方法有两个主要问题:

  1. 箱线图被人为地放置在绘图区域内,而不是边缘。而且因为我将它设置为固定的y 和固定的width,它可以与密度重叠或看起来很小,具体取决于分布的高度。这就是为什么我得出结论,我需要将它放在地块边缘,在 geom_rug 上方。

  1. 生成 ggplotly 时,箱线图就消失了,只留下一条虚线,就好像它是另一个 geom_rug。我知道 plotly 支持箱线图,但也许水平 + 刻面的组合对于它的翻译来说太过分了。

我坚持强调需要它与情节兼容,因此来自ggdistggExtra 等的自定义几何图形不是一个选项,因为 ggplotly 的翻译器不支持它们。

【问题讨论】:

    标签: r ggplot2 r-plotly ggplotly


    【解决方案1】:

    我现在在我的包chronicle 中完全实现了这一点。我必须使用 geom_segment()geom_rect() 手动绘制箱线图的所有线条和矩形

    library(chronicle)
    
    make_raincloud(dt = iris,
             value = 'Sepal.Length',
             groups = 'Species')
    

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      相关资源
      最近更新 更多