使用ggplot进行简单箱线图时如何解决不一致的绘图?
How to solve inconsistant ploting while using ggplotly for simple boxplot?
我正在尝试利用新的 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() 中的标记不同。
我怎样才能摆脱它,使其看起来 'same' 为 ggplot(第一个图)?
那么,我如何add/edit ggplotly 上的图例。
时隔一年多来回答有点尴尬。但希望它对以后搜索相同问题的人有所帮助,因为我最近遇到了类似的问题(当我无法隐藏 geom_boxplot 中的异常值时)。
参考 R or Python 中的 plotly boxplot,您可能在这些 c('all', False, 'suspectedoutliers','outliers')
之一中有 boxpoints
,显示异常值的方式不同。选择'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
参数并且有 marker 和 line 的参数,我删除了标记外的线,然后更改框线的宽度。
这将修复离群值的外观。如果你也想修复图例,也许你可以查看$legendgroup
,但是,我还没有一个好的解决方案。
顺便说一句,如果有人正在寻找 hide/disable 异常值的方法,例如 in 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
再说一次,希望对你有帮助。
我正在尝试利用新的 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() 中的标记不同。 我怎样才能摆脱它,使其看起来 'same' 为 ggplot(第一个图)?
那么,我如何add/edit ggplotly 上的图例。
时隔一年多来回答有点尴尬。但希望它对以后搜索相同问题的人有所帮助,因为我最近遇到了类似的问题(当我无法隐藏 geom_boxplot 中的异常值时)。
参考 R or Python 中的 plotly boxplot,您可能在这些 c('all', False, 'suspectedoutliers','outliers')
之一中有 boxpoints
,显示异常值的方式不同。选择'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
参数并且有 marker 和 line 的参数,我删除了标记外的线,然后更改框线的宽度。
这将修复离群值的外观。如果你也想修复图例,也许你可以查看$legendgroup
,但是,我还没有一个好的解决方案。
顺便说一句,如果有人正在寻找 hide/disable 异常值的方法,例如 in 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
再说一次,希望对你有帮助。