首页 > 解决方案 > ggplot:根据两个geom的组合创建一个新geom

问题描述

例如,我有两个 geomgeom_smoothgeom_point. 我想创建一个新的单独几何图形,geom_smoothpoint它将绘制上述两个几何图形。

我想要这个:

ggplot(iris, aes(x=Sepal.Length, y=Petal.Width)) +
  geom_smoothpoint()

给出与以下相同的结果:

ggplot(iris, aes(x=Sepal.Length, y=Petal.Width)) +
  geom_point() +
  geom_smooth(method="lm")

在此处输入图像描述

我尝试将这两者结合起来:

geom_smoothpoint <- function(){
  geom_point() +
  geom_smooth(method="lm")
}

但它并没有真正起作用。看来我必须组合ggproto对象,但我不确定如何。有什么简单的方法可以将两个几何图形合二为一吗?谢谢!

标签: rggplot2

解决方案


你当然可以自己写geom,但这绝对是矫枉过正。在函数中返回一个列表要容易得多,您可以方便地将其添加到绘图中:

geom_smoothpoint <- function() {
   list(geom_point(), geom_smooth(method = "lm"))
}

ggplot(iris, aes(x=Sepal.Length, y=Petal.Width)) +
   geom_smoothpoint()

推荐阅读