R:使用 ggplot2 绘制多个函数

2023-12-05

我需要绘制多个显式函数定义以直观地比较它们。

考虑函数族:

fun.1 <- function(x) { 1 / ( 0.01 + x) }
fun.2 <- function(x) { 1 / ( 0.1 + x) }
fun.3 <- function(x) { 1 / ( 0.3 + x) }

这个想法是绘制评估这些函数的结果 关于以下输入:

xs = c(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048)

目前,我的代码是:

library(ggplot2)
library(dplyr)

xs = c(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048)

fun.1 <- function(x) { 1 / ( 0.01 + x) }
fun.2 <- function(x) { 1 / ( 0.1 + x) }
fun.3 <- function(x) { 1 / ( 0.3 + x) }

base <- ggplot(data.frame(x = xs), aes(x=as.factor(x)))

base + theme_classic() +
       theme(
          legend.position = c(.95, .95),
          legend.justification = c("right", "top"),
          legend.box.just = "right",
          legend.margin = margin(6, 6, 6, 6)
          ) +
       geom_function(fun = fun.1, colour = "red") + 
       geom_function(fun = fun.2, colour = "blue") +
       geom_function(fun = fun.3, colour = "yellow") +
       scale_x_discrete(name = "Input",
                        breaks = xs) +
       scale_y_discrete(name = "Growth")

结果是这样的

现在这看起来很难看,我无法让图例出现并且有警告:

Multiple drawing groups in `geom_function()`. Did you use the correct `group`, `colour`, or `fill` aesthetics?
Multiple drawing groups in `geom_function()`. Did you use the correct `group`, `colour`, or `fill` aesthetics?
Multiple drawing groups in `geom_function()`. Did you use the correct `group`, `colour`, or `fill` aesthetics?

我想要的风格就像this。理想情况下,这些点应该是可见的 并由连续曲线连接。

问题是,创建具有多个函数且样式如下的绘图的最佳方法是什么this ?


你可以只lapply()在某些东西上,如果它自动添加到 ggplot 中,因为它是一个列表。仅当 lapply 循环的输出是 ggplot 能够理解的内容(例如 geoms)时,这才有用。

下面的示例假设可以使用您提供的命名结构找到相关函数。

library(ggplot2)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

xs = c(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048)

fun.1 <- function(x) { 1 / ( 0.01 + x) }
fun.2 <- function(x) { 1 / ( 0.1 + x) }
fun.3 <- function(x) { 1 / ( 0.3 + x) }

ggplot(data.frame(x = xs), aes(x=x)) + 
  lapply(1:3, function(i) {
    fun_name <- paste0("fun.", i)
    fun <- get(fun_name)
    line <- geom_function(fun = fun,
                          aes(colour = fun_name))
    points <- geom_point(aes(y = fun(xs), colour = fun_name))
    list(line, points)
  }) +
  scale_x_log10(breaks = xs, name = "Input") +
  scale_y_continuous(name = "Growth") +
  theme_classic() +
  theme(
    legend.position = c(.95, .95),
    legend.justification = c("right", "top"),
    legend.box.just = "right",
    legend.margin = margin(6, 6, 6, 6)
  )

Created on 2020-12-07 by the reprex package (v0.3.0)

值得注意的是,虽然你的情节在几乎所有方面似乎都是连续的,但你添加了_discrete()我不明白的位置尺度的变体。我将所有内容都转换为数字。

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

R:使用 ggplot2 绘制多个函数 的相关文章

随机推荐

  • 如何使用 Tkinter 创建导入文件按钮?

    那么您知道当您使用记事本 在 Windows 上 时如何打开旧文件吗 单击文件 然后打开 然后打开一个文件对话框 您可以选择所需的文件 程序将显示其内容 基本上 我想用 Python 制作一个按钮来完成同样的事情 这是我的按钮功能 def
  • java中基本类型的转换规则

    In java 有整型 char short int long byte 有浮动类型 float double 有布尔类型 boolean 不是整型 与 C 语言不同 问题 是否有一个通用的铸造规则 根据 JLS 可以说明哪种类型可以转换为
  • 不带@调用实例变量

    我是 Ruby 编程新手 现在已经看到一些示例 其中调用实例变量时前面没有 符号 我不确定这是否是因为正在调用该方法并且实例变量作为以下结果存储在该方法中 attr reader在类或 if 中因为我对实例变量的理解错误 这是我所指的一个例
  • 节点生成进程检查超时

    我生成了有时需要很长时间才能运行的进程 我的问题是有办法限制此进程时间吗 例如3分钟后杀死这个进程 您可以使用process kill在超时的情况下 但请记住 如果子进程在被解雇之前完成 请取消超时 看一下这个例子 This is chil
  • 在不同控制器中创建片段时出现重复 ID 错误

    所以 我正在构建一个基本上是 CRUD 的应用程序 在此应用程序中 我有以下视图 控制器 访问编辑 and 请求新 At the 请求新控制器 我有一个处理按钮按下的函数 onRequestNewAddCustomerPress funct
  • 找不到i2c注册宏?

    我正在 raspi 上开发 I2C 驱动程序 register I2C device static static const struct i2c board info rasp i2c devices mbed mbedID in the
  • 适用于 x64 应用程序的 Microsoft.ACE.OLEDB.12.0 驱动程序 - 如何使其与安装的 x86 MS Office 一起使用?

    Microsoft ACE OLEDB 12 0 驱动程序无法在我的电脑上运行 我正在尝试修复它 连接打开时的错误是 找不到提供程序 它可能未正确安装 这是我现在得到的 我已经构建了 x64 C ADO NET 控制台应用程序 其中包含用于
  • React-native-reanimated:无法解析“./useValue”

    我正在尝试构建一个反应本机应用程序 我在终端上发现一个错误 Unable to resolve useValue from node modules react native reanimated src Animated js 我重新安装
  • C 中的无符号长整型位移位

    我在我编写的一段代码中发现了一个错误 并已修复它 但仍然无法解释发生了什么 归结起来是这样的 unsigned i 1 lt lt 31 gives 21476483648 as expected unsigned long l 1 lt
  • Dart的扩展方法

    有一个Person类 以及Person类的扩展 如下 class Person bool get isEmpty return this null extension PersonExt on Person bool get isEmpty
  • 有可用的 C++ 重构工具吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有谁知道一个功能齐全的 C 重构工具 可以可靠地处理大型代码库 大约 100 000 行 在过去的几年里 我一次又一次地尝试了所有我能找到的东西 S
  • [expr.const] 部分中“前面的初始化”一词的含义是什么

    constexpr int func int const rf return rf int main constexpr int value func 0 考虑上面的代码 变量value应由常量表达式初始化 即func 0 它首先应该是一个
  • 为什么我不能将画布对象分配给现有画布?

    我的软件创建了相当复杂的 petrinet 并将其绘制在画布上 由于它显示了多次 预览窗口 更大的视图 我想缓存绘制的画布 我的第一次尝试是 XAML
  • Jetpack 撰写惰性列不与列表重新组合

    我有一个列表 存储在Viewmodel via Stateflow class FirstSettingViewModel ViewModel private val mRoomList MutableStateFlow
  • 如何调试 C 共享库(用 Go 编写) - 它挂在网络调用上

    去代码http Post 如果我构建exe 就可以了 如果我构建 C 共享库 buildmode c 共享 它挂在 https Post 上 我试过了strace fp PID futex 0x7f618b2c1cd0 FUTEX WAKE
  • AngularJS 错误? - 选择多个 - 根据选项数量动态设置大小

    我想动态控制多选的大小 html
  • Android 设备在 espresso 测试时不会在屏幕上启动活动

    只要我在 YouTube 视频中看到 Android 设备倾向于启动并显示在我的测试中启动的活动 我就认为这里有问题 因为我的设备根本没有反应 尽管屏幕始终处于打开状态 动画已关闭 当我尝试测试应用程序中首先运行的活动 逻辑上 时 我尝试在
  • 字符串内存分配

    哪一个更好 System out println hello world or String s hello world System out println s 对于这个简单的例子来说 内存分配没有区别
  • 同一 Makefile 中 make 目标之间的递归依赖关系

    我正在尝试编写一个 makefile 它能够确定标头何时更改 然后重新编译相应的 cpp 文件 为了测试这一点 我创建了三个文件 main cpp a h and b h main cpp包括 sa h and a h包括b h 我的 ma
  • R:使用 ggplot2 绘制多个函数

    我需要绘制多个显式函数定义以直观地比较它们 考虑函数族 fun 1 lt function x 1 0 01 x fun 2 lt function x 1 0 1 x fun 3 lt function x 1 0 3 x 这个想法是绘制