1

我正在尝试利用新的 ggplot2(开发版)功能使我的绘图具有交互性。我还安装了 plotly-dev 版本。

然而,对我来说,它似乎没有像承诺的那样工作。考虑到这一点,

gg <- ggplot(data = mtcars, aes(x = factor(mtcars$cyl), y = mtcars$hp)) + 
  geom_boxplot(aes(fill = factor(mtcars$cyl), color = factor(mtcars$cyl), alpha = 1/2 )) 

gg 

ggplotly(gg)

如果您注意到,您会看到异常值在 ggploty() 中以不同方式标记。我怎样才能摆脱它,使它看起来与 ggplot (第一个图)“相同”?

然后,如何在 ggplotly 上添加/编辑图例。

4

1 回答 1

3

时隔一年多才回答,有点尴尬。但希望它对以后搜索相同问题的人有所帮助,因为我最近遇到了类似的问题(当我无法隐藏 geom_boxplot 中的异常值时)。

参考RPython中的 plotly boxplot ,您可能会boxpoints在其中一种中c('all', False, 'suspectedoutliers','outliers')使用不同的方式显示异常值。选择时'suspectedoutliers',您可以调整标记的样式。在这里,差异来自标记外的线

我还没有找到一种方法来轻松地做到这一点ggplotly,但在plotly_build. (您将深入了解它存储数据的结构)

第一的,

    gg <- ggplot(data = mtcars, aes(x = factor(mtcars$cyl), y = mtcars$hp)) + 
        geom_boxplot(aes(fill = factor(mtcars$cyl), color = factor(mtcars$cyl), alpha = 1/2 ))
    ggly <- plotly_build(gg)

你可以看看ggly$x$data。您可能会看到 3 个项目的列表,它们对应于图表上的 3 个框。

下一个,

    for (i in 1:length(ggly$x$data)) {
        # ggly$x$data[[i]]$boxpoints <- "outliers"
        ggly$x$data[[i]]$marker$line <- NULL
        ggly$x$data[[i]]$line$width <- 1
    }
    rm(i)
    ggly

由于它没有$boxpoints参数并且具有标记线的参数,因此我删除了标记外的线,然后更改了框线的宽度。这将修复异常外观。如果您还想修复图例,也许您可​​以检查一下$legendgroup,但是,我还没有一个好的解决方案。

顺便说一句,如果有人正在寻找一种方法来隐藏/禁用像geom_boxplot 这样的异常值,您可以'suspectedoutliers'通过将其不透明度设置为 0 来使用和设置异常值的样式。(我这样做是为了稍后绘制另一层抖动。)

    for (i in 1:length(ggly$x$data)) {
        ggly$x$data[[i]]$boxpoints <- "suspectedoutliers"
        ggly$x$data[[i]]$marker$opacity <- 0
    }
    rm(i)
    ggly

再次,希望它有所帮助。

于 2019-02-05T21:26:48.963 回答