r - ggplot : plotting layers only if certain criteria are met

标签 r ggplot2

ggplot内有过滤方法吗本身?也就是说,说我想这样做

p <- ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length, species)) +
     geom_point(size = 4, shape = 4) +
     geom_point(size = 1, shape = 5 # do this only for data that meets some condition. E.g. Species == "setosa") 

我知道我可以使用一些技巧,例如设置 size = 0 if Species != "setosa"或重置数据,如下所示,但有所有黑客。
p <- ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length, species)) +
     geom_point(size = 4, shape = 4) +
     geom_point(data = iris %>% filter(Species == "setosa"), colour = "red") +
     geom_point(data = iris %>% filter(Species == "versicolor"), shape = 5)

基本上,我有一个图表,其中只有在满足特定条件时才应该显示某些东西,而现在,我正在使用上面的黑客来完成这个,它让我彻夜难眠,我的灵魂慢慢地死于我的困惑已创建。不用说,任何帮助将不胜感激!

编辑

恐怕我的例子可能过于简单化了。基本上,给定 ggplot(data = ...) ,我如何添加这些图层,全部使用绑定(bind)到 ggplot obj 的数据:
  • 绘制曲线
  • 在满足标准 #1 的点上绘制点。这些点将是红色的。不符合标准的点不会被绘制(不是像点大小设置为零或 alpha 设置为 0 的 hack)
  • 将标签添加到符合条件 #2 的点。

  • 标准#1 和#2 可以是任何东西。例如。仅标注异常点。仅用红色绘制特定范围之外的点等。

    不要想要
  • 绑定(bind)一个新的数据集ala ggplot(data=subset(iris, Species=="setosa"),...)ggplot(data=filter(iris,Species=="setosa") .
  • 使用缩放技巧(例如设置 scale=manual 并且任何不符合条件的都将获得 NULL/NA 等)。例如,如果我有 1000 个点并且只有 1 个点符合给定标准,我希望它仅将其绘制逻辑应用于该点而不是查看,并对所有 1000 个点进行样式设置
  • 最佳答案

    您可以使用 ~ 使用匿名函数过滤数据。公式符号:

    library(ggplot2)
    library(dplyr)
    
    ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length, species)) +
        geom_point(size = 4, shape = 4) +
        geom_point(data = ~filter(.x, Species == "setosa"), colour = "red") +
        geom_point(data = ~filter(.x, Species == "versicolor"), shape = 5)
    

    reprex package 创建于 2021-11-15| (v2.0.0)

    关于r - ggplot : plotting layers only if certain criteria are met,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35806310/

    相关文章:

    r - 如何使 ggplot2 barplot 中的条形具有 Shiny 的交互性?

    r - 箱线图 mustache 上的样本大小

    r - Shiny -conditionalPanel - 将条件设置为服务器的输出

    r - 通过变量编号在AES中寻址x和y

    c - 如何将打印的 vector 列与 sprintf (R) 对齐

    r - 如何捕获R公式的固定项?

    从 boxplot 和 plotly 中删除异常值

    r - 在grobTree中使用linesGrob绘制ggplot页脚

    r - 在R中将负值设置为3d黄土平滑时,将上限设置为0

    r - 使用 ggplot 将条形图的列与线图的点对齐