繁体   English   中英

带有 ggplot2 的箱线图:试图在 plot 的代码上放置 geom_jitter,奇怪的异常点

[英]Boxplot with ggplot2: Trying to lay geom_jitter over code for plot, strange outlier dots

我研究并使用了两种不同的代码来为我的数据制作箱线图:

一个代码 (A) 相当简单,基本上在我的箱线图中显示了我想要的功能:背面的网格线,在控制和干预中区分我的患者组,通过访问,在 x 和 y 轴上使用数字进行缩放。 一个问题是显示了奇怪的异常值,我宁愿将其合并到显示所有数据点的抖动中。 我还想稍微改变 plot 的测量值,即 x 和 y 轴长度/比率为更方形的形状,如果控制箱和干预箱可以彼此分开更远,那将是理想的。 我还想在风格上用较浅的颜色填充框,如“B”所示。

先感谢您!

这是A的代码:

ggplot(df, aes(x=visit,y=weight_v1_3, color=groupci)) +
  geom_boxplot(width=.5) + theme_bw() + scale_color_brewer(palette="Dark2")

我使用的第二个代码 (B) 有一个 geom_jitter,我真的很想将它合并到 A 中。

B的代码:

  df <- df %>% 
  rename_with(~ gsub("\\.", "_", tolower(.x))) 

pal <- c("red", "blue")

g <- ggplot(df, aes(x = groupci, y = weight_v1_3)) +
  geom_boxplot(aes(fill = groupci, fill = after_scale
(colorspace::lighten(fill, .7))), alpha = .5, size = 1.5, outlier.size = 5)
  

g + 
  geom_jitter(aes(color = groupci), width = .1, size = 7, alpha = .5) +
  scale_y_continuous(breaks = 1:9) +
  scale_color_manual(values = pal, guide = "none") +
  scale_fill_manual(values = pal, guide = "none")

样本数据:

structure(list(pseudonym = c(1L, 2L, 4L, 5L, 6L, 7L, 3L, 8L, 
9L, 10L, 11L, 1L, 2L, 4L, 5L, 6L, 7L, 3L, 8L, 9L, 10L, 11L, 1L, 
2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L), control.0.1. = c(0L, 0L, 0L, 
0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 
1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), intervention.0.1. = c(1L, 
1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 
0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), visit = c(2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), weight.V1.3 = c(60L, 
60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 59L, 59L, 59L, 
59L, 59L, 59L, 59L, 59L, 59L, 59L, 59L, 57L, 57L, 57L, 57L, 57L, 
57L, 57L, 57L, 57L)), class = "data.frame", row.names = c(NA, 
-31L))

“A”plot:

剧情

“B”plot:

B图

您会看到异常点,因为默认情况下,它们显示在geom_boxplot()中。 如果您希望隐藏它们,您可以在geom_boxplot()中将outlier.coloroutlier.shape设置为NA

这是一个说明性示例。 首先,显示使用默认值覆盖geom_jitter()的箱线图。 框 plot 的颜色为黑色,我更改了抖动点的形状以使通过geom_boxplot()显示的异常点更加明显。

library(ggplot2)

df <- diamonds[sample(1:nrow(diamonds), size=500),]

p <-
ggplot(df, aes(x=cut, y=price)) +
  geom_boxplot() + 
  geom_jitter(aes(color=cut), width=0.2, size=2, shape=2)
p

在此处输入图像描述

现在,要从箱线图几何图形中删除异常值,您可以将任何outlier.shapeoutlier.color值设置为NA ,它将删除它们。

p1 <-
ggplot(df, aes(x=cut, y=price)) +
  geom_boxplot(outlier.shape = NA) + 
  geom_jitter(aes(color=cut), width=0.2, size=2, shape=2)
p1

在此处输入图像描述

您应该能够将其应用于您自己的示例(我无法重现,因为您引用了代码中数据中不存在的列); 但是,请注意,删除异常值不适用于outlier.size=NA 您必须使用outlier.color=NAoutlier.shape=NA

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM