如何使用自定义ggplot软件包ggQC突出显示某些点?

时间:2019-01-16 19:43:22

标签: r ggplot2

library(tidyverse)
library(ggQC)
set.seed(5555)
Golden_Egg_df <- data.frame(month = 1:12,
                 egg_diameter = rnorm(n = 12, mean = 1.5, sd = 0.2))
Golden_Egg_df$egg_diameter[3] <- 2.5

上面生成了示例数据...以创建如下所示的图。我希望红线上方或下方的所有点都突出显示,最好在该点周围有一个圆圈,在我们的示例中为第三点。

我知道我可以通过添加geom_point()语句来添加ifelse。我不知道如何从stat_QC()中剥离较高的“红线值” “较低的红线” 值,以使我能够利用我提出的建议方法。

在此希望您知道如何提供答案。

XmR_Plot <- ggplot(Golden_Egg_df, aes(x = month, y = egg_diameter)) +
               geom_point() + geom_line() + 
               stat_QC(method = "XmR")

xmr

1 个答案:

答案 0 :(得分:3)

初始图:

library(ggplot2)
p <- ggplot(Golden_Egg_df, aes(x = month, y = egg_diameter)) +
  geom_point() + geom_line() + 
  stat_QC(method = "XmR")

这是我们使用ggplot_build从红线中提取数据的一种选择。您可以在此处阅读有关ggplot_build对象的更多信息:https://rud.is/books/creating-ggplot2-extensions/demystifying-ggplot2.html#the-ggplot_built-object

pb <- ggplot_build(p)
thres <- range(pb$data[[3]]$yintercept) # you need to inspect pb$data to find the right element

thres包含红线的y值。

thres
#[1] 0.7319105 2.3820961

如果现在仅要突出显示这些值上方(或下方)的点,请添加另一个包含初始数据子集的点层

p + geom_point(
  data = subset(Golden_Egg_df,
                egg_diameter > max(thres) | egg_diameter < min(thres)),
  shape = 21,
  size = 4,
  col = "red"
)

enter image description here