【发布时间】:2021-10-20 14:44:42
【问题描述】:
有谁知道geom_abline() 中的哪个参数不影响 x 和 y 比例?
函数draw_panel() w/i GeomAbline 获取基础“范围”,但该线通常应该位于原始比例之外:
GeomAbline <- ggproto("GeomAbline", Geom,
draw_panel = function(data, panel_params, coord) {
ranges <- coord$backtransform_range(panel_params)
data$x <- ranges$x[1]
data$xend <- ranges$x[2]
data$y <- ranges$x[1] * data$slope + data$intercept
data$yend <- ranges$x[2] * data$slope + data$intercept
GeomSegment$draw_panel(unique(data), panel_params, coord)
},
default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA),
required_aes = c("slope", "intercept"),
draw_key = draw_key_abline
)
我的猜测是geom_abline() 的ggplot2:layer() 中设置的参数/函数ggplot2::StatIdentity 和ggplot2::PositionIdentity。但我不明白这是如何工作的?我的动机是写一个新的geom_*,它也不会影响 x 和 y 比例。
【问题讨论】:
-
geom_abline()的构造函数将数据重新参数化为不具有与 x 或 y 比例 here 相关的任何美学。请注意slope和intercept不会出现在scale_x_continuous()$aesthetics中(y 相同)。 -
感谢您的正确回答。如果您想将其写为答案,我当然会接受。我不知道只有某些美学会影响 x/y 缩放。你知道,是否可以添加额外的美学考虑,或者是否有办法告诉某个
geom_*()不影响缩放? -
我不确定是否可以在不编写自定义比例构造函数的情况下添加额外的位置美学。我不知道如何将一个层排除在参与规模训练之外。我认为比例控制这个而不是层,所以我不知道层的选择退出方法。
-
好的,谢谢!仍然是一个非常有帮助的评论。我发现了一个非常尴尬的解决方法。我有两个自定义的
stat_*()和geom_*(),其中stat_*()使用required_aes = c("x", "y")但返回c("x_noaes", "y_noaes")。后者相当于geom_*()中使用的required_aes。因此,我不需要新的映射,但比例不受我的geom_*()的影响。