背景
我正在阅读有关如何将自我调整文本放入条形图中的出色答案:Resizeable text grobs inside bar
在阅读了一些 关于扩展 ggplotggproto
的小插曲之后,我想知道为什么作者必须将例程定义如下:setup_data
GeomFit <- ggproto("GeomFit", GeomRect,
setup_data = function(data, params) {
data$width <- data$width %||%
params$width %||% (resolution(data$x, FALSE) * 0.9)
transform(data,
ymin = pmin(y, 0), ymax = pmax(y, 0),
xmin = x - width / 2, xmax = x + width / 2, width = NULL
)
})
因为这本质上是来自以下内容的复制粘贴ggplot2::GeomBar
:
GeomBar$setup_data
# <ggproto method>
# <Wrapper function>
# function (...)
# f(...)
# <Inner function (f)>
# function (data, params)
# {
# data$width <- data$width %||% params$width %||% (resolution(data$x,
# FALSE) * 0.9)
# transform(data, ymin = pmin(y, 0), ymax = pmax(y, 0), xmin = x -
# width/2, xmax = x + width/2, width = NULL)
# }
所以我想我可以简单地替换它:
GeomFit <- ggproto("GeomFit", GeomRect,
setup_data = function(self, data, params)
ggproto_parent(GeomBar, self)$setup_data(data, params))
这种方法有效,但我怀疑这是否会导致一些不需要的行为,仅仅是因为GeomFit
isGeomRect
和not GeomBar
的父类。
问题
是否可以(从某种意义上说:没有可能导致问题的条件)用于ggproto_parent
从不是我的ggproto
对象的父类的类中调用函数?为什么ggproto_parent
一开始就有parent
争论?父母不应该由 的第二个参数决定ggproto
吗?