ggplot2和其他函数(R)之间的加号[重复]

Posted

技术标签:

【中文标题】ggplot2和其他函数(R)之间的加号[重复]【英文标题】:Plus sign between ggplot2 and other function (R) [duplicate] 【发布时间】:2016-11-05 02:56:59 【问题描述】:

我正在尝试获取此示例:

ggplot(mpg, aes(displ, hwy)) + geom_point()

谁能解释一下这两个函数之间发生了什么?

ggplot2 是否重载“加号”运算符?总结这2个结果是什么,分配给什么?它是 R 特有的功能,还是 ggplot2 特有的?它是一种管道吗?

【问题讨论】:

不容易找到,但help("+.gg")有你想要的信息。我发现 +.gg 存在通过使用 methods("+") 加载 ggplot2。 是与否;它实际上是一个管道(Hadley 在 ggplot2 之后发现/共同创作了 magrittr,并表示现在更改 ggplot 为时已晚),但它实际上是添加到一个 ggplot 对象中,该对象在调用完成之前不会被绘制。所以是的,您可以将其视为在函数之间传递data 参数,但将其视为...附加会更有用。在ggplot_build 中包裹一个图,以了解里面的对象。 【参考方案1】:

@Richard Scriven 在注释中引用的函数定义在plot-construction.r 中定义,这样可能会更清楚。您需要查看源代码以确切了解这两个(未导出的)函数的作用(调用的 LHS 是 theme 还是 ggplot 对象)但名称应该会给您一个很好的主意。返回值为e1,通过“添加”e2修改。

"+.gg" <- function(e1, e2) 
  # Get the name of what was passed in as e2, and pass along so that it
  # can be displayed in error messages
  e2name <- deparse(substitute(e2))

  if      (is.theme(e1))  add_theme(e1, e2, e2name)
  else if (is.ggplot(e1)) add_ggplot(e1, e2, e2name)

所以,是的,+ 对继承类 gg 的对象(所有 ggplot2 对象)进行了重载。

我认为“管道”(@alistaire 的评论)是一种误导性的类比;这非常符合标准 Ops 组通用的风格。

【讨论】:

以上是关于ggplot2和其他函数(R)之间的加号[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何快速(优雅地)在 R 中的时间序列对象 `ts` 和日期框架之间进行迭代以进行 ggplot2 绘图?

R语言可视化 ggplot2—几何对象

R语言ggplot2可视化散点图(scatter plot)并在可视化图像的顶部和右边添加边缘直方图(Marginal Histogram)使用geom_smooth函数基于lm方法拟合数据点之间

R语言ggplot2可视化散点图(scatter plot)并在可视化图像的顶部和右边添加边缘箱图(Marginal boxplot)使用geom_smooth函数基于lm方法拟合数据点之间的趋势

R/graphics:在函数中绘制为 PNG

R语言ggplot2可视化散点图可视化两个数值变量之间的关系使用geom_smooth函数基于loess方法拟合数据点之间的趋势关系曲线自定义数据点的大小色彩添加主标题副标题题注信息