我正在复制粘贴我正在使用的自定义函数的简化版本。该函数工作正常,但它产生的warnings
我无法摆脱。这个函数将成为一个包的一部分,因此对于用户来说,不要被这些神秘错误所抛弃是很重要的,因此,我希望以不再产生这些警告的方式更改脚本。
警告是(见下面完全可重现的例子):
position_jitterdodge requires non-overlapping x intervals
我已经检查过这个关于position_jitterdodge
(Position-dodge warning with ggplot boxplot?)的问题,由于此图中没有箱形图,因此没有多大帮助。
对问题和代码的长期性质表示歉意。希望提供所有可能的细节来帮助诊断。
# loading needed libraries
library(ggplot2)
library(dplyr)
library(devtools)
devtools::install_github("daattali/ggExtra")
library(ggExtra) # attach the development version
library(rlang)
# defining the custom function
ggscatterstats <-
function(data = NULL,
x,
y,
xfill = "orange",
yfill = "green",
marginal = NULL,
marginaltype = "histogram",
jitter.width = NULL,
jitter.height = 0.2,
dodge.width = 0.75) {
# preparing a dataframe out of provided inputs
if (!is.null(data)) {
# if dataframe is provided
data <-
dplyr::select(
.data = data,
x = !!rlang::enquo(x),
y = !!rlang::enquo(y)
)
} else {
# if vectors are provided
data <-
base::cbind.data.frame(x = x,
y = y)
}
# preparing the scatterplotplot
plot <-
ggplot2::ggplot(data = data,
mapping = aes(x = x,
y = y)) +
geom_count(
show.legend = FALSE,
colour = "black",
size = 3,
alpha = 0.5,
position = position_jitterdodge(
jitter.width = jitter.width,
jitter.height = jitter.height,
dodge.width = dodge.width
)
) +
geom_smooth(method = "lm",
se = TRUE,
size = 1.5) +
theme_grey()
# marginal plot will be shown by default
if (is.null(marginal))
marginal <- TRUE
if (isTRUE(marginal)) {
# creating the ggMarginal plot of a given marginaltype
plot <-
ggExtra::ggMarginal(
p = plot,
type = marginaltype,
size = 5,
xparams = list(fill = xfill,
col = "black"),
yparams = list(fill = yfill,
col = "black")
)
}
return(plot)
}
# using the function
ggscatterstats(data = iris, x = Sepal.Length, y = Petal.Width)
#> Warning: position_jitterdodge requires non-overlapping x intervals
#> Warning: position_jitterdodge requires non-overlapping x intervals
由reprex package(v0.1.1.9000)创建于2018-02-15。
答案 0 :(得分:2)
最简单的例子更容易讨论。
这是一个根据代码生成此警告的最小示例:
.jar
我不明白你在这里要做什么。我可能错了,但似乎没有使用不应该一起使用的工具/概念。
library(ggplot2)
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) +
geom_count(size = 3, alpha = 0.5, position = position_jitterdodge())
的重点是通过表示给定x y坐标上的观察数与点的大小来处理overplottig。所以你不应该设置尺寸,也不需要抖动/躲避:
geom_count
另一种可能性是使用可以与抖动相结合的ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) +
geom_count()
但是将抖动与躲避结合在一起似乎没有意义:
geom_point
只有当你有一个离散的x轴和一个额外的躲避者时,抖动+躲闪似乎才有意义。在这里,我们创造了一个人为的附加&#34;性别&#34;变量将被加载到演示的颜色aestetic。
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) +
geom_point(size = 3, alpha = 0.5, position = position_jitter())
如果这一切都没有意义,请你解释为什么你需要iris$Sex <- factor(c("M", "F"))
ggplot(iris, aes(x = Species, y = Sepal.Width, color = Sex)) +
geom_point(size = 3, alpha = 0.5, position = position_jitterdodge())
具有固定大小(更准确地说是&#34;设置大小&#34;在ggplot术语中)和抖动的组合躲闪?