gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:09:42 27 4
gpt4 key购买 nike

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/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com