从自定义函数实现几何选项

2023-11-29

我倾向于以极其复杂的方式结束ggplot数字具有很多自定义功能,因此我很自然地将它们作为函数添加到我的代码中,以便我可以轻松地重用它们。当我想使用我的自定义函数之一,但稍微调整它时,就会出现问题,例如删除或添加我已经在函数内定义的几何图形的美感。我对此的选择是:

  1. 创建一个几乎重复的函数,但添加了特定的更改,并且更改了函数名称以反映这一点或

  2. 向函数添加参数以改变ggplot是在函数内部构造的

我尽可能地尝试选择 2.,因为它明显减少了脚本中的冗余和混乱程度。

然而,有时 2. 在函数内部几乎退化为 1.,迫使我重新输入包含多个参数的整个 geom 函数。我将给出一个非常简单的例子,记住我所拥有的功能非常复杂,值得我在这里做的深思:

gg_custom_point <- function(df, xvar, yvar, gvar=NA){
    g <- ggplot(df)

    if(is.na(gvar)){
        # do geom without colour
        g <- g + geom_point(aes_string(x=xvar, y=yvar))
    }
    else{
        # do geom with colour - mostly redundant code
        g <- g + geom_point(aes_string(x=xvar, y=yvar, colour=gvar))
    }
    return(g)
}

# I can use the same function to make slightly different custom plots
gg_custom_point(mtcars, "wt", "mpg")
gg_custom_point(mtcars, "wt", "mpg", "qsec")

问题是我不得不重新输入整个内容geom_point而不仅仅是添加美感。如果我希望能够为一个几何体调整多种美学,那么冗余问题就更糟糕了——我必须输入包含给定参数中可能的每种美学组合的几何体。

我可以这样做:

g <- g + geom_point(aes_string(x=xvar, y=yvar))
if(!is.na(gvar)){
    # Add to the global aesthetic - no need to retype the whole geom
    g <- g + aes_string(colour=gvar)
}

但这并不能扩展到使用多个数据源的多个几何图形,因为所有几何图形都需要使用这种颜色美感和gvar column.

有没有一种方法可以轻松地为已添加到的特定几何图形添加美感ggplot目的?或者,有没有更好的使用方法ggplot2自定义函数中的函数和几何图形?


您可以将该变量设置为 NULL 而不是 NA。这至少适用于您的简单示例:

gg_custom_point <- function(df, xvar, yvar, gvar=NULL){
  g <- ggplot(df) + 
         geom_point(aes_string(x=xvar, y=yvar, colour=gvar))

  return(g)
}

gg_custom_point(mtcars, "wt", "mpg")
gg_custom_point(mtcars, "wt", "mpg", "qsec")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从自定义函数实现几何选项 的相关文章

随机推荐

  • .NET 4 GUID 是如何生成的?

    我知道有很多问题here以及雷蒙德的出色 像往常一样 post 然而 由于创建 GUID 的算法明显发生了变化 我发现很难获得任何最新信息 这MSDN似乎试图提供尽可能少的信息 关于 NET 4 中如何生成 GUID 我们了解多少 更改了什
  • ID 保存并显示名称 - 带芯片的材质 ui 多选

    我正在使用基于文档示例的 Material UI Multiple Select 我需要保存所选选项的 ID 和显示名称 我尝试了很多方法但没有任何帮助 我需要存储 id 并显示值 请帮助我指导 这是我的代码和盒子link 我也想知道同样的
  • 奇怪的谷歌地图行为 - 瓷砖仅出现在左上象限

    使用谷歌地图数十次 但无法绕过这一点 为地图版本 3 执行 google 的简单 hello world http code google com apis maps documentation javascript tutorial ht
  • 赋值关联性[重复]

    这个问题在这里已经有答案了 赋值运算符有右到左关联性 所以 var x y x y 1 按预期工作 x 等于 1 现在考虑代码 var foo foo x foo n 2 我希望上面的工作像下面这样 var foo n 2 foo x fo
  • 管理两个 NSURLConnection

    我想从两个不同的 kml 文件执行两个异步请求 因此我首先设置两个请求 NSString server1URL NSString stringWithFormat NSMutableURLRequest firstRequest NSMut
  • Github 操作在作业之间共享工作空间/工件?

    尝试使用 Github 的 beta 操作时 我有两项工作 一项是构建代码 另一项是部署代码 但是 我似乎无法在部署作业中获取构建工件 我最新的尝试是为每个作业手动设置具有相同卷的容器映像 根据文档 这应该是解决方案 https help
  • python:类 super() 的代理对象,在指定的类处启动 MRO 搜索

    根据文档 super cls obj returns 将方法调用委托给父级或同级的代理对象 cls 类型的类 我明白为什么super 提供此功能 但我需要稍微不同的东西 我需要创建一个代理对象 将方法调用 和属性查找 委托给类cls本身 和
  • 如何从“请告知 Microsoft 此事”对话框中获取错误报告?

    我编写的一个程序在启动时崩溃 Windows XP 对话框 请告诉 Microsoft 有关此问题的信息 出现 我想知道这个问题 因为这是我的应用程序 问题是 单击 单击链接 查看错误报告的内容 错误报告内容 对话框不允许我的客户将其内容复
  • Delphi:将数据存储在类与记录中,减少内存使用

    当应用程序运行时 我需要在内存中存储 读取和修改大量数据 数据可以比作一棵树 其中每个节点由有限数量的字符串和整数描述 并且具有相当多的子元素 目前数据是使用类 对象存储的 例如 TRootElement class fName fDesc
  • 使用 php 从像素计算图像大小(以英寸或 dpi 为单位)

    假设 300dpi 我需要计算近似的图像尺寸 以英寸为单位 我心中有一个目标图像大小 我想向用户展示他们上传的图像是否足够 或者是否需要拉伸 并据此提供各种条件消息 我已经有了以像素为单位的高度和宽度 只需要知道我猜的数学 DPI 每英寸点
  • 禁用单击按钮事件 C# [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我在 Visual Studio 2013 C 中编程 我想要一个功能来短时间禁用按钮 我试过button Enabled false 但我发现当我在禁用期间单击它时 单击操作会在我在程序
  • 386的“D位”中的“D”代表什么?

    In 关于 GDT 的文章OSDev wiki 描述了用作 CS 描述符的 D 位的标志 如下所示 Sz 尺寸位 如果0选择器定义16位保护模式 如果1它定义了32位保护模式 您可以同时拥有 16 位和 32 位选择器 另一个问题引用了英特
  • 黄瓜/红宝石:可以将“puts”输出到 --format html 文件吗?

    我有一些 ruby 测试 它们调用不同的模块 类 它们详细说明了在执行过程中使用一些 puts 命令所做的事情 如果您在控制台中运行这些测试 那么您将在控制台中看到 puts 命令的输出 但如果您使用以下选项运行测试 ruby format
  • 将 NSString 转换为 NSDate [重复]

    这个问题在这里已经有答案了 可能的重复 将 NSString 转换为 NSDate 然后再转换回来 我向 flickr api 发出请求 它返回以下格式的日期 2013 02 01T06 25 47Z 我如何将其转换为 NSDate 格式
  • Python,Paramiko:如何使用 paramiko 执行“ssh -n user@host cmd”?

    我正在尝试通过 SSH 从 Python 远程执行命令 在这种特殊情况下需要stdin被重定向到 dev null 也就是说 与使用带有 n 标志的 OpenSSH 客户端相同 ssh n user host cmd 你如何实现这个 n P
  • 如何在akka流中的akka​​客户端websocket中使用Flow.map

    我有一个 WebSocket 服务器 我需要通过已建立的 WebSocket 连接向它发送和接收消息 因为 Akka 客户端 WebSocket 不为我们提供传统的websocket send 与java中一样的功能 所以我找到了这个解决方
  • 如何处理多个弹出窗口(material ui)

    我尝试在组件内使用多个弹出窗口 例如 在下面的代码中我有两个弹出窗口 但是当单击两个按钮中的任何一个时 两个弹出窗口都会打开 我们如何处理 onclick 以打开相应的弹出窗口 const anchorEl setAnchorEl Reac
  • 使用不同的 postgres 架构进行 Flask Migrate ( __table_args__ = {'schema': 'test_schema']})

    我正在尝试使用flask sqlalchemy 和flask migrate 但每次运行manage py migrate时 alembic总是将我的模型检测为新表 我想我把表参数在我的模型中将表存储在不同的 postgres 模式中 cl
  • Chrome 扩展内容脚本自定义 ui

    我正在编写一个 chrome 扩展 它通过脚本注入在多个网页中显示一些自定义 UI 我注入页面的脚本将一些 Dom 项目附加到文档主体中用户可以与之交互 问题是 项目的样式受到页面 CSS 的影响 我已经通过将 css 应用于插入到 dom
  • 从自定义函数实现几何选项

    我倾向于以极其复杂的方式结束ggplot数字具有很多自定义功能 因此我很自然地将它们作为函数添加到我的代码中 以便我可以轻松地重用它们 当我想使用我的自定义函数之一 但稍微调整它时 就会出现问题 例如删除或添加我已经在函数内定义的几何图形的